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 は、1 つのブロックでの完全な送信を保証しません。

メッセージ全体を受信するには、複数回の読み取りが必要になる場合があります。

現在フォーマットされていないため、コードを確認しませんでした。そうしてください(私たちがあなたを助けやすくするため)。

于 2011-04-19T08:29:41.253 に答える
0

指定されたバイト数を読み取る簡単な方法は、ストリームを でラップしBinaryReader、 を呼び出すだけReadBytesです。

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

tcpClient.GetStream.DataAvailabledo while オプションを使用できます。
タイマーを増やすことは正しいオプションではありません。

于 2011-08-05T12:37:01.360 に答える
0

実際、それは非常に単純でした。ストリームを読む前に少し遅らせました。問題は、ストリーム全体を読み取る前に、プログラムの実行が次の行に到達することでした。少し遅れて、データのストリーム全体が確実に取得されました。とにかくありがとう

于 2011-05-15T14:16:00.167 に答える