我使用C#来制作服务器和客户端。我希望它能阻止我所做的事情。当我使用NetworkStream.read()时,它会阻塞,我喜欢这样。问题是,当我使用NetworkStream.ReadByte()时,它不会阻塞。相反,当没有传入字节时,它会返回-1。如何使NetworkStream.ReadByte()像NetworkStream.read()那样阻塞?
我试图将NetworkStream.ReadByte()包含在NetworkStream.DataAvailable中,但这也不起作用。我只是wantNetworkStream.ReadByte()来阻止。有什么想法吗?
发布于 2014-10-20 07:41:50
为什么不直接使用:
byte[] buf = new byte[1];
stream.Read(buf, 0, 1);编辑:当然,如果您经常这样做,不要每次都分配新的缓冲区,将其存储为对象上的字段&在构造函数中分配它。
发布于 2014-10-20 08:20:33
ReadByte块。它只在流的末尾返回-1。你一定是误解了你看到的东西。将ReadByte替换为nevelis建议的解决方案,您将不会看到行为上的差异。
发布于 2016-02-23 11:52:07
在MSDN文档中找不到这方面的任何明确信息,但是现在我们已经拥有了开源CoreFX,我们可以查看实现:
NetworkStream重写对正在阻塞的Socket.Receive的读取调用,但不覆盖ReadByte。Stream.ReadByte只是调用Read,所以NetworkStream.ReadBytes将调用阻塞NetworkStream.Read。
https://stackoverflow.com/questions/26460616
复制相似问题