0

サブネット全体の特定のポートでリッスンしているすべてのノードにブロードキャストする単純な UDP ハートビートを作成しようとしています。

クライアント DatagramSocket の作成/バインドに問題があります。私はこのようなコードを試しています:

// My IP is 192.168.201.57, so I'm using 192.168.201.255 for broadcast.  Right?
val socket = new DatagramSocket(9099, InetAddress.getByName("192.168.201.255"))

これにより例外が発生しました: java.net.BindException: 要求されたアドレスを割り当てることができません。

同じ結果で 255.255.255.255 も試しました。別の投稿で読んだものに基づいて、次のようなことも試しました。

val socket = new DatagramSocket(null)
socket.bind( new InetSocketAddress(broadcastIp, port) )  // where I tried several broadcastIp values

これも同じ例外を与えました。また、別のポート値を試して、試しているポートがマシン上で他に使用されていないことを確認したことも付け加えておきます。

4

2 に答える 2

0

これが私が通常使用するコードです:

public static final String HOST_DST = "148.140.60.29";
public static final int    PORT_DST = 2416;
public static final int    PORT_SRC = 2802;

void method() {
   DatagramSocket    sock    = new DatagramSocket( PORT_SRC );
   InetSocketAddress dst     = new InetSocketAddress( HOST_DST, PORT_DST );
   ByteBuffer        message = ByteBuffer.allocate( MESSAGE_SIZE );
   for(...) {
      message.clear();
      message.putFloat( ... );
      message.putInt( ... );
      ...
      message.flip();
      sock.send( new DatagramPacket( message.array(), message.limit(), dst ));
   }
}
于 2013-04-09T18:33:34.433 に答える