1

このような私のクライアントコード:

   socket = new Socket("10.105.1.20", 5678);
   DataOutputStrean dos = new DataOutputStream(socket.getOutputStream());
   short len = 4;
   dos.writeByte(len);
   dos.writeByte(len >> 8);
   dos.writeShort(0x0410);
   dos.flush();

サーバーに送信されるのは4バイトである必要がありますが、wiresharkを使用してパケットをフェッチすると、データは3バイトになります

   00 04 10

そうあるべきだと思う

   04 00 04 10

最初のバイト 04 はどこですか? 私のコードに問題がありますか、それともwireshark.THXに関連していますか?

4

2 に答える 2

4

4 つの書き込みすべてが同じパケットで送信されることを保証するものは何もありません。おそらく最初のバイトは単独で送信され、次の 3 バイトは Nagle アルゴリズムによって合体されました。BufferedOutputStream を使用して、書き込みを送信したいときにそれをフラッシュできますが、それでも保証はありません。TCP は、好きな方法でデータをセグメント化できます。

于 2013-11-05T12:07:04.353 に答える
-1

Java では、短いプリミティブ データ型は 16 ビットです。

This SO answerは、short を byte[] に変換する方法を示しています。それはあなたが探しているものかもしれません。

さらに、このSO の質問には、バイト順序に関する詳細情報があります。

于 2013-11-05T11:47:04.157 に答える