TCPClient无法读取传入的数据

时间:2011-05-30 09:36:48

标签: c# stream tcpclient wireshark

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

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

我已经检查过像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();

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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