我已经编写了一个代码来监听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();
答案 0 :(得分:0)
一个原因可能是超时!
假设发送套接字发送的数据不超过接收套接字超时,则会导致超时错误,并将中断while
循环并关闭套接字。
This MSDN链接可能对您有帮助!
此外,我建议您仅在因超出Timeout之外的其他原因导致while
中断时关闭套接字。如果发生超时,请继续阅读。