NetworkStream stream = socket.GetStream();
if (stream.CanRead)
{
while (true)
{
int i = stream.Read(buf, 0, 1024);
result += Encoding.ASCII.GetString(buf, 0, i);
}
}
上面的代码旨在从TcpClient
在单独线程上运行时检索消息。Read
方法工作正常,直到它应该返回 -1 表示没有什么可读取的了;相反,它只是在没有任何明显原因的情况下终止它正在运行的线程 - 使用调试器跟踪每个步骤表明它只是在该行之后停止运行。
我也尝试用 a 封装它但try ... catch
没有多大成功。
这可能是什么原因造成的?
编辑:我试过
NetworkStream stream = socket.GetStream();
if (stream.CanRead)
{
while (true)
{
int i = stream.Read(buf, 0, 1024);
if (i == 0)
{
break;
}
result += Encoding.ASCII.GetString(buf, 0, i);
}
}
感谢@JonSkeet,但问题仍然存在。线程在该read
行终止。
EDIT2:我修复了这样的代码并且它有效。
while (stream.DataAvailable)
{
int i = stream.Read(buf, 0, 1024);
result += Encoding.ASCII.GetString(buf, 0, i);
}
我觉得问题很简单,只是我想的不够透彻。感谢大家看这个!