TCPClient - 一段时间后停止接收数据

时间:2013-10-01 05:47:41

标签: c# tcp

我已经编写了一个代码来监听TCP模式下特定端口的数据。 现在问题是下面的代码从远程接收一些数据,并在一段时间后它没有收到任何东西

我检查过wireshark,数据正在那里 我检查了TCPView,端口(同一个端口的2-3个条目在那里)是用应用程序打开但很少端口状态保持为“ESTABLISHED”,一个端口说“LISTENING”

如果我正在检查wireshark的missign数据细节,那么我发现远程IP端口对在TCPView中被声明为“ESTABLISHED”但它无法在日志文件中写入任何内容

我的问题是为什么我的申请中没有收到数据。代码有什么问题吗?我已经尝试了谷歌可以提供的所有选项,但没有运气。

       TcpListener tcpListenerDeviceResponse = new TcpListener(new IPEndPoint(IPAddress.Parse(localIP), 6005));
        tcpListenerDeviceResponse.Start();
        while (true)
        {
            using (TcpClient client = tcpListenerDeviceResponse.AcceptTcpClient())
            {
                // Get a stream object for reading and writing
                using (NetworkStream stream = client.GetStream())
                {
                    Socket skSource = client.Client;
                    int i;
                    var data2 = new byte[client.ReceiveBufferSize];
                    // Loop to receive all the data sent by the client.
                    while ((i = stream.Read(data2, 0, data2.Length)) != 0)
                    {
                        // Translate data bytes to a ASCII string.
                        string strResponse = System.Text.Encoding.ASCII.GetString(data2, 0, i);
                        // Insert the data in log text file
                        // process data
                    }
                    stream.Close();
                }
                // Shutdown and end connection
                client.Close();
            }
       }
       tcpListenerDeviceResponse.Stop();

1 个答案:

答案 0 :(得分:0)

一个原因可能是超时!

假设发送套接字发送的数据不超过接收套接字超时,则会导致超时错误,并将中断while循环并关闭套接字。

This MSDN链接可能对您有帮助!

此外,我建议您仅在因超出Timeout之外的其他原因导致while中断时关闭套接字。如果发生超时,请继续阅读。