我有一个小程序,它是一个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没有来自服务器(设备)的完整响应
答案 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
选项。
增加计时器不是正确的选择。