1

我有一个小程序,它是一个 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

4 回答 4

2

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

要接收整个消息,可能需要多次阅读。

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

于 2011-04-19T08:29:41.253 回答
0

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

Dim reader As BinaryReader = new BinaryReader(serverStream)
Dim buffer As Byte() = reader.ReadBytes(amount)
于 2011-04-19T14:09:02.957 回答
0

其实很简单。我只是在阅读流媒体之前延迟了一些时间。问题是在整个流被读取之前,程序执行到了下一行。一点延迟确保检索到整个数据流。不管怎么说,还是要谢谢你

于 2011-05-15T14:16:00.167 回答
0

您可以将tcpClient.GetStream.DataAvailable选项与 do while 一起使用。
增加计时器不是正确的选择。

于 2011-08-05T12:37:01.360 回答