vb.net中的tcp客户端没有从服务器接收整个数据响应数据

时间:2011-04-19 08:23:39

标签: .net vb.net tcpclient tcpsocket

我有一个小程序,它是一个tcp客户端。我从这个客户端发送一个字符串到以太网上的设备(它充当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 个答案:

答案 0 :(得分:2)

通过网络发送的任何数据都可能会碎片化。 TCP不保证在一个块中完成传输。

要接收整个信息,可能需要多次读取。

我没有检查你的代码,因为它目前没有格式化。请这样做(以便我们更方便地为您提供帮助)。

答案 1 :(得分:0)

读取给定字节数的简单方法是将流包装在BinaryReader中,然后调用ReadBytes

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

答案 2 :(得分:0)

实际上这很简单。我只是在阅读流之前给了一些延迟。问题是在读取整个流之前,程序执行到了下一行。稍微延迟确保检索整个数据流。不管怎样,谢谢

答案 3 :(得分:0)

您可以在执行时使用tcpClient.GetStream.DataAvailable选项。
增加计时器不是正确的选择。