tcp клиент в vb.net не получает полные данные ответа от сервера - PullRequest
1 голос
/ 19 апреля 2011

У меня есть небольшая программа, которая является клиентом TCP.Я отправляю строку с этого клиента на устройство через Ethernet (он действует как tcp сервер).Как только устройство получит входную строку, оно ответит ответными данными.Моя проблема в том, что я не получаю все данные ответа от сервера.(Устройства).

   Dim serverStream As NetworkStream = clientSocket2.GetStream()
   Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes("my-cmd")
   serverStream.Write(outStream, 0, outStream.Length)

   'serverStream.Flush()
   Dim inStream(clientSocket2.ReceiveBufferSize) As Byte
   serverStream.Read(inStream, 0, CInt(clientSocket2.ReceiveBufferSize))        
   returndata = System.Text.Encoding.ASCII.GetString(instream)

Returndata не имеет полного ответа от сервера (устройства)

Ответы [ 4 ]

2 голосов
/ 19 апреля 2011

Любые данные, отправленные по сети, могут быть фрагментированы.TCP не гарантирует полную передачу в одном блоке.

Для получения всего сообщения может потребоваться многократное чтение.

Я не проверял ваш код, так как в настоящее время он не отформатирован.Пожалуйста, сделайте это (чтобы нам было легче вам помочь).

0 голосов
/ 05 августа 2011

Вы можете использовать опцию tcpClient.GetStream.DataAvailable с do while.
Увеличение таймера не является правильным вариантом.

0 голосов
/ 15 мая 2011

На самом деле это было очень просто.Я просто дал некоторую задержку перед чтением потока.Проблема заключалась в том, что до того, как весь поток мог быть прочитан, выполнение программы переходило к следующей строке.Небольшая задержка обеспечила получение всего потока данных.Все равно спасибо

0 голосов
/ 19 апреля 2011

Простой способ прочитать заданное количество байтов - это просто обернуть поток в BinaryReader и вызвать ReadBytes:

Dim reader As BinaryReader = new BinaryReader(serverStream)
Dim buffer As Byte() = reader.ReadBytes(amount)
...