0

マルチキャストを介してlongを送信しようとしています。文字列を送信できるため、接続は機能するはずです。

これは私のサーバーサイドコードです:

currentServerStatusId = Server.getServerStatusVersionId();
buf = ByteBuffer.allocate(8).putLong(currentServerStatusId).array(); //long should be 8 bytes in Java
InetAddress group = InetAddress.getByName(multicastAddress);
DatagramPacket packet = new DatagramPacket(buf, buf.length, group, port);
socket.send(packet);

これはクライアント側(受信者)にあります:

byte[] buf = new byte[256];
serverIpPacket = new DatagramPacket(buf, buf.length);
System.out.println("waiting to receive");
multicastSocket.receive(serverIpPacket);
receivedIp = serverIpPacket.getAddress().getHostAddress();
currentServerStatusId = ByteBuffer.allocate(8).put(serverIpPacket.getData()).getLong();
//new String(serverIpPacket.getData(), 0, serverIpPacket.getLength());
System.out.println("received current ServerStatusId: " + currentServerStatusId);

これにより、BufferUnderflowExceptionが発生します。どうやら、レシーバー/クライアント側のallocateメソッドでサイズを8から16に2倍にすると機能するようです。しかし、その後、私のテスト値の代わりに0を返します(68763のようなもの)

4

1 に答える 1

0

さて、申し訳ありませんが、トラブルのために、私はちょうど自分で答えを見つけました:

私はこれをクライアント側に置く必要があります:

ByteBuffer buffer = ByteBuffer.wrap(serverIpPacket.getData());
currentServerStatusId = buffer.getLong();

それで全部です

于 2012-10-22T18:19:42.050 に答える