tcpclient getstream - прочитано ноль байтов - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть настройка соединения 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 Ответ

2 голосов
/ 03 ноября 2010

Во-первых, вы абсолютно не должны читать символьные данные таким образом. Вы предполагаете, что ваш байтовый массив всегда содержит целое количество символов. Вместо этого вы должны использовать StreamReader, который предназначен для этого.

Если вы абсолютно должны читать непосредственно из потока, используйте один экземпляр Decoder, который может обрабатывать эти частичные символы, буферизуя их для следующего преобразования.

Теперь вам также требуется , что numbytesread > 1 - что если это ровно 1? Почему вы хотите игнорировать это?

Также не ясно, для чего нужна ваша временная метка ... разве поток не будет блокировать до бесконечности , пока не получит некоторые данные? Или вы явно настроили его на тайм-аут чтения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...