目前我一直在努力,从使用TcpClient的服务器接收数据的程序。我的问题是,无论什么时候我读取流,直到我的客户停止工作,它只是冻结。我想保持与服务器的连续连接,但是在我的while函数运行两次之后,第三个循环不会执行读取操作,也不会返回任何内容。避免的NetworkStream读取块
As this answer states that I'm correct
我怎样才能打破或返回这个while循环,或以某种方式绕过读取块?
using (NetworkStream stream = client.GetStream())
{
byte[] data = new byte[2048];
using (MemoryStream ms = new MemoryStream())
{
int numBytesRead;
while ((numBytesRead = stream.Read(data, 0, data.Length)) > 0)
{
ms.Write(data, 0, numBytesRead);
}
return ms.ToArray();
}
}
我无法从你的代码,并说明是否真的用'Read'呼叫的问题告诉我们,但承担的时刻,它只是需要一些时间来获得下一批数据,只有这样才能让你的在如此长时间的阅读中GUI响应是通过在单独的线程上进行联网。 – adv12
实际上,我将限定我的上述评论:您也可以使用'BeginRead' /'EndRead'。 – adv12
我真的没测试,服务器会发送长度1654字节,然后同时读取它两次:1460和194,然后是1654年但当第三循环运行,如果数据是0它会检查中,循环只是在那里搜索,并且不再启动,只是等待更多的数据。 – DreTaX