通过TCP接收来自不同源的字节流

时间:2016-09-21 10:10:01

标签: c# wcf sockets tcp tcpclient

我正在制作一个应用程序,简单地说,必须能够从各种来源(客户/ 客户端的JSON文件 >)所以我们可以将它们读入我们公司的数据库(服务器)。

这个JSON是通过客户的参数创建的,当然还有放在文件夹中的文件。

这是我目前使用的代码,我知道一次发送整个文件而不是发送整个文件是一个坏主意,但这只是为了看它是否有效。

客户端:

    // Serialize the object to JSON
    string json = JsonConvert.SerializeObject(sf);

    // Set up the connection
    try
    {
        TcpClient tcp = new TcpClient("127.0.0.1", "12345");

        using (NetworkStream nst = tcp.GetStream())
        {
            byte[] dataToSend = Encoding.ASCII.GetBytes(json);

            nst.Write(dataToSend, 0, dataToSend.Length);
            nst.Flush();
        }

        tcp.Close();

服务器:

IPAddress ip = IPAddress.Parse("127.0.0.1");
TcpListener tl = new TcpListener(ip, "12345");

TcpClient tc = tl.AcceptTcpClient();

using (NetworkStream ns = tc.GetStream())
{
    byte[] buffer = new byte[tc.ReceiveBufferSize];
    int bRead = ns.Read(buffer, 0, tc.ReceiveBufferSize);
    json = Encoding.ASCII.GetString(buffer, 0, bRead);

    sfi = JsonConvert.DeserializeObject<g.SSWFile>(json);
}

tl.Stop();

但这个&#39;工作&#39;对于小文件,在快乐路径场景中,一次只有一个客户发送一个文件,它将完美地工作,但是幸福的路径场景永远不会发生......

简而言之:我需要找到一种强大的方法来确保多个客户可以与我们的服务器进行交互,并确保我们的服务器能够发送“确定”的信息。或者&#39;错误&#39;回传消息,以便文件可以存档或放在客户的错误目录中。还要确保JSON的大文件大小不会造成问题。

我见过的选项是:

  • WCF(Duplex?):代码最少,性能最差,流式传输
  • NetworkStream和TcpClient / TcpReader:更多代码,更高性能,流媒体(取决于您如何编码)

我不是WCF或网络流媒体的专家,所以我来这里是为了征求您的意见。

0 个答案:

没有答案