tcpclient getstream - 零字节读取

时间:2010-11-03 13:15:38

标签: vb.net visual-studio-2008

我有一个tcpclient连接设置捕获连续的http流。由于某种原因,在读取前几个字节后,流不会长时间获取任何数据。我的代码有问题吗?

   Dim tclient As TcpClient = New TcpClient(url, "80")
   nstream = tclient.GetStream() 
  If nstream.CanRead Then
              defaultsize = 8000, BUFFER_SIZE = 1024
                Dim bufferread(defaultSize) As Byte
                Dim data As String
                mstring = New StringBuilder
                numbytesread = 0
                Dim timestamp As DateTime = DateTime.Now

                Do
                    numbytesread = nstream.Read(bufferread, 0, BUFFER_SIZE)

                    If numbytesread > 1 Then
                        timestamp = DateTime.Now
                        data = Encoding.UTF8.GetString(bufferread, 0, numbytesread)
                        parsingUtilities.appendXMLtoFile(data)
                    End If
                    If DateTime.Now.Subtract(timestamp).TotalSeconds > 60 Then
            'timestamp shows no bytesread for more than 60 seconds, then reconnect
                        Exit Sub
                    End If

                Loop While tclient.Connected
            End If

1 个答案:

答案 0 :(得分:2)

首先,你绝对不应该以这种方式读取字符数据。您假设您的字节数组始终包含整数个字符。您应该使用StreamReader代替,这是为了解决这个问题。

如果您绝对必须直接从流中读取,请使用Decoder的单个实例来处理这些部分字符,并为下次转换缓冲它们。

现在,您还要求 numbytesread > 1 - 如果它正好是1,该怎么办?你为什么要忽略它?

还不清楚你的时间戳是什么...不是流将阻止无限期直到获得一些数据?或者您是否已使用读取超时明确设置它?