方法在读取TCP套接字数据时结束

时间:2017-07-10 10:48:22

标签: c# vb.net sockets tcp listener

我正在尝试捕获通过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

1 个答案:

答案 0 :(得分:1)

调用NetworkStream.Read()会导致 阻止 直到有可供阅读的数据,但此行为是由于文档中未提及的某些原因(I相信它是在之前?)。如果有数据需要阅读,则会立即返回。

为了避免在您阅读完所有内容后阻止您的代码,您可以检查是否有数据要通过流DataAvailable property读取,如果当前没有数据要读取,则会返回False:< / p>

While stream.DataAvailable

请注意,此方法和您之前的方法都不会考虑延迟数据。如果数据由于某种原因被延迟(例如由于连接速度慢),除非您再次运行,否则此代码可能无法读取该数据。