Java アプリについて助けが必要です。ワイルドカード アドレスにバインドされたデータグラム ソケットでブロードキャスト パケットを受信する必要があります。最も重要なことは、wlan0 に構成済みの IP アドレスが含まれていてはならないということです。このアプリの目的は、DHCP のようなサーバーから有効な IP を取得することだからです。
まず、0.0.0.0 で wlan0 を構成します。
さらに、wlan0 インターフェイス (唯一のインターフェイス) を経由するようにデフォルトのルーティングを設定します。
Ifconfig の出力は次のとおりです。
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:117 errors:0 dropped:0 overruns:0 frame:0
TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9337 (9.3 KB) TX bytes:9337 (9.3 KB)
wlan0 Link encap:Ethernet HWaddr 00:1b:77:dd:e7:a4
inet6 addr: fe80::21b:77ff:fedd:e7a4/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:30211 errors:0 dropped:1 overruns:0 frame:0
TX packets:6128 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:16654450 (16.6 MB) TX bytes:654646 (654.6 KB)
これは、クライアントでソケットを作成する方法です。
InetSocketAddress broadcast = new InetSocketAddress("0.0.0.0",listenPort);
socket = new DatagramSocket(null);
socket.setSoTimeout(5000);
socket.setBroadcast(true);
socket.bind(new InetSocketAddress(broadcast.getPort()));
次に、クライアントから 255.255.255.255 にデータグラム パケットを送信します。サーバー (同じサブネット上) はそれらを受信し、サブネット上のブロードキャストで応答します。クライアント マシンはサーバーのブロードキャスト パケットを受信しますが、ソケットは受信せず、socket.receive(); で自身をブロックします。
構成されていない (IP なしの) インターフェイスにバインドされたソケットでデータグラムを受信する方法はありますか?
wlan0 に IP を与えてみましたが、すべて動作しますが、wlan0 を構成せず、ワイルドカード アドレス 0.0.0.0 にのみバインドする必要があります。