Kan*_*Yoo 2 c# networking stream
NetworkStream stream = socket.GetStream();
if (stream.CanRead)
{
while (true)
{
int i = stream.Read(buf, 0, 1024);
result += Encoding.ASCII.GetString(buf, 0, i);
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码旨在检索从TcpClient单独的线程上运行的一段时间的消息.Read方法工作正常,直到它应该返回-1表示没有任何东西可以阅读; 相反,它只是在没有任何明显原因的情况下终止它正在运行的线程 - 使用调试器跟踪每个步骤表明它只是在该行之后停止运行.
我也尝试用一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
感谢@JonSkeet,但问题仍然存在.线程终止于该read行.
编辑2:我修改了这样的代码,它的工作原理.
while (stream.DataAvailable)
{
int i = stream.Read(buf, 0, 1024);
result += Encoding.ASCII.GetString(buf, 0, i);
}
Run Code Online (Sandbox Code Playgroud)
我认为这个问题很简单,我只是没有彻底思考.谢谢大家看看这个!
不,Stream.Read当没有什么可读的时候返回0,而不是-1:
返回值
读入缓冲区的总字节数.如果当前没有多个字节可用,则这可能小于请求的字节数,如果已到达流的末尾,则可以小于零(0).
我的猜测实际上,没有异常被抛出并且线程没有被中止 - 但它只是永远循环.如果您在调试器中单步执行,您应该能够看到这一点.无论发生什么,你的"快乐"终止条件永远不会受到影响......
| 归档时间: |
|
| 查看次数: |
1530 次 |
| 最近记录: |