0

UDP 経由で長い番号を送信します。

    LinkedQueue Q = new LinkedQueue<ByteBuffer>();
    while (this._run) {
    udp_socket.receive(packet);
      if (packet.getLength() > 0) {
       ByteBuffer bb = ByteBuffer.wrap(buf, 0, packet.getLength());     
               Q.add(bb);
          }
    }

//udp クローズ。Queue からデータを削除しましたが、すべての ByteBuffers の値が同じです。

    while(!Q.isEmpty){
      ByteBuffer b = Q.remove();
      b.getLong();//same value
    }

同じ値を受け取るのはなぜですか? 提案はありますか?

4

1 に答える 1

1

バイト バッファは 1 つだけで構成されていますlongか?

おそらくそうではありませんが、私の推測では、そこに1つだけ入れるには少し多すぎますlong. sizeof(long)そのため、最初のバイトで同じ値が得られます。

必要なことは、バッファの最後に到達するまで .getLong() を呼び出し続けることです。

ドキュメントを参照してください。

于 2013-04-02T15:33:29.510 に答える