C# TCP客户端未读取传入数据

C# TCP客户端未读取传入数据,c#,stream,tcpclient,wireshark,C#,Stream,Tcpclient,Wireshark,我正在开发一个C#应用程序,它通过TCP/IP连接到主机,然后使用TCPClient流发送和接收响应 问题是我可以使用Stream.Write(…)发送数据,但是当我试图通过调用Stream.Read(…)来获取对发送数据的响应时,它会挂起,并且永远不会返回 我已经检查了网络嗅探工具(如Wire Shark),可以看到我的网络接口正在接收来自主机的数据。为什么我的TCPClient无法读取此数据 WireShark显示的接收数据的十六进制转储以00开头,这是否意味着一个空字符,从而导致TCPCl

我正在开发一个C#应用程序,它通过TCP/IP连接到主机,然后使用TCPClient流发送和接收响应

问题是我可以使用Stream.Write(…)发送数据,但是当我试图通过调用Stream.Read(…)来获取对发送数据的响应时,它会挂起,并且永远不会返回

我已经检查了网络嗅探工具(如Wire Shark),可以看到我的网络接口正在接收来自主机的数据。为什么我的TCPClient无法读取此数据

WireShark显示的接收数据的十六进制转储以00开头,这是否意味着一个空字符,从而导致TCPClient读取问题

00-1d-4f-fb-43-4b-00-1d-7e-3a-9a-20-08-00-45-00-00-34

这是写的代码

myTcpClient = new TcpClient();
myTcpClient.Connect("192.168.0.194", 1958);
Stream myTCPStream = myTcpClient.GetStream();
ASCIIEncoding asen = new ASCIIEncoding();
byte[] msgBytes = asen.GetBytes("Message to be sent.");
myTCPStream.Write(msgBytes, 0, msgBytes.Length);
这就是阅读的代码

byte[] bytesReceived = new byte[100];
int nBytesRead = myTCPStream.Read(bytesReceived, 0, bytesReceived.Length);
myTcpClient.Close();

感谢您的帮助。

这可能是一个时间问题,但如果不看到您的代码,很难说(您是否在发送数据包后直接运行读取代码?它是否在同一线程上?)


另一个想法是:尝试将属性设置为true。这会告诉TCP堆栈立即将数据传递到应用程序,而不是等待完全的缓冲区(禁用)。这有助于减少发送和接收小数据包时的延迟。

我的魔法水晶球仍需要修复,因此我担心您必须同时向我们展示代码……是的,我在发送相同线程后立即阅读。wireshark捕获的数据为54字节,从0x00开始。这是某种确认吗???数据将是接收到新连接时从服务器应用程序发送回的任何内容-它看起来像某种二进制协议。发布Wireshark日志可能会有所帮助