我有一个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
答案 0 :(得分:2)
首先,你绝对不应该以这种方式读取字符数据。您假设您的字节数组始终包含整数个字符。您应该使用StreamReader
代替,这是为了解决这个问题。
如果您绝对必须直接从流中读取,请使用Decoder
的单个实例来处理这些部分字符,并为下次转换缓冲它们。
现在,您还要求 numbytesread > 1
- 如果它正好是1,该怎么办?你为什么要忽略它?
还不清楚你的时间戳是什么...不是流将阻止无限期直到获得一些数据?或者您是否已使用读取超时明确设置它?