我正在开发一个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();
感谢您的帮助。
答案 0 :(得分:0)
这可能是一个时间问题,但很难说没有看到你的代码(你发送数据包之后是直接运行读取代码吗?它是在同一个线程上吗?)
另一个想法:尝试将NoDelay属性设置为true。这告诉TCP堆栈立即将数据传递到您的应用程序而不是等待完整缓冲区(禁用Nagle algorithm)。这对于减少发送时的延迟非常有用。接收小数据包。