为什么 NetworkStream.DataAvailable 总是 true?
我打开一个 TcpClient
,然后调用 tcpClient.GetStream().Read(message, 0, 8)
以从连接读取消息。
由于某种原因,即使连接的另一端没有发送任何数据,我仍然不断收到垃圾数据。 Read()
永远不会阻塞,DataAvailable
始终为 true
,并且我得到很多垃圾数据。
可能是什么原因?
预先感谢您的帮助!
I open a TcpClient
and then call tcpClient.GetStream().Read(message, 0, 8)
in order to read messages from the connection.
For some reason I keep getting garbage data even though the other side of the connection does not send any data. Read()
never blocks, DataAvailable
is always true
, and I get a lot of garbage as the data.
What could be the reason?
Thank you in advance for your help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果不看到管道的两端(尤其是发送端),就很难回答这个问题。
DataAvailable
仅真正指示本地缓冲区的状态(而不是流本身);就确定流的结束而言,它基本上没有用(t 报告一些不相关的内容)。我预计这是传输代码中的一个错误。这里的一个典型错误如下:
何时:
第一个(也是不正确的)版本发送内存流后备缓冲区的垃圾部分。
That is hard to answer without seeing both ends of the pipe (but in particular the sending end).
DataAvailable
only really indicates the state of the local buffer (not the stream itself); in terms of determining the end of a stream it is largely useless (t reports something unrelated).I expect this is a bug in the transmitting code. A classic error here is the following:
When it should be:
The first (and incorrect) version sends the garbage portion of the memory-stream's backing buffer.