1

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

我已经检查了wireshark,并且数据正在那里我已经检查了TCPView,端口(有2-3个相同端口的条目)与应用程序一起打开,但很少有端口状态保持为“已建立”并且一个端口说“正在监听” "

如果我正在检查 Wireshark 的错误数据详细信息,那么我发现远程 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();
4

1 回答 1

1

一个原因可能是超时!

假设 Transmitting socket 发送数据的时间不超过 Receiving socket 的超时时间,则会导致 Timeout Error 并中断while循环并关闭套接字。

这个MSDN 链接可能会对您有所帮助!

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

于 2013-10-01T09:28:05.200 回答