【问题标题】:Method ends when reading TCP socket data方法在读取 TCP 套接字数据时结束
【发布时间】:2017-07-10 10:48:21
【问题描述】:

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

【问题讨论】:

  • 你试过用异常处理程序包围它吗?
  • 在什么意义上“语句随机结束”?程序终止?

标签: c# vb.net sockets tcp listener


【解决方案1】:

调用NetworkStream.Read() 将导致它阻止,直到有数据可供读取,尽管由于某种原因文档中没有提到这种行为(我相信它是以前吗?)。如果有数据要读取,调用将立即返回。

为避免在您阅读完所有内容后阻塞您的代码,您可以通过流的DataAvailable property 检查是否有要读取的数据,如果当前没有要读取的数据,它将返回 False

While stream.DataAvailable

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2016-08-10
    • 2019-04-02
    • 2016-07-05
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多