我正在尝试捕获通过TCP端口based on this tutorial发送的所有数据。但是,一旦收集了所有数据,该语句将随机结束
i = stream.Read(bytes, 0, bytes.Length)
一旦while
循环收集了我需要的所有数据,然后使用这个较低的下来,而不是它只是停止。也没有错误。我该怎么做?
i = stream.Read(bytes, 0, bytes.Length)
While(i<> 0)
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
'On second loop, once all data has been gathered, the program just drops out after this line
i = stream.Read(bytes, 0, bytes.Length)
MessageBox.Show(data)
End While
答案 0 :(得分:1)
调用NetworkStream.Read()
会导致 阻止 直到有可供阅读的数据,但此行为是由于文档中未提及的某些原因(I相信它是在之前?)。如果有数据需要阅读,则会立即返回。
为了避免在您阅读完所有内容后阻止您的代码,您可以检查是否有数据要通过流DataAvailable
property读取,如果当前没有数据要读取,则会返回False
:< / p>
While stream.DataAvailable
请注意,此方法和您之前的方法都不会考虑延迟数据。如果数据由于某种原因被延迟(例如由于连接速度慢),除非您再次运行,否则此代码可能无法读取该数据。