リストから自己選択する必要のある静的IPアドレスがわからない状態で開始するVM用のJavaベースのソリューションを開発しようとしています。解決策についての私の考えは次のとおりです。
- Zeroconf / avahiを使用して、VMのIPアドレスを選択します
- VMは、マルチキャストを使用してMACアドレスをブロードキャストします。各VMは、予想されるピアMACアドレスの数を認識します。
- すべてのVMが他のすべてのMACアドレスを受信すると、それらをアルファベット順に並べ替え、リスト内のMACアドレスの位置(IP.1、IP.2など)に基づいてIPを選択します。
DHCPはどのような状況でもこの環境では利用できないことに注意してください。私は、この問題の回避策を見つけようとしています。
この例外の解決にご協力ください。お手伝いできることがあれば教えてください。ありがとう!!
java.net.SocketException: No such device
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.join(AbstractPlainDatagramSocketImpl.java:178)
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:319)
これが私が使用しているJavaコードです:
InetAddress address = InetAddress.getByName(mIPAddress);
SocketAddress addr = new InetSocketAddress(address, mPort);
MulticastSocket multiSocket = new MulticastSocket(addr);
multiSocket.joinGroup(address);
/ sbin/ifconfigの出力は次のとおりです。
eth0 Link encap:Ethernet HWaddr 08:00:27:1D:BB:21
inet6 addr: fe80::a00:27ff:fe1d:bb21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:152 errors:0 dropped:0 overruns:0 frame:0
TX packets:182 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:35179 (34.3 KiB) TX bytes:36383 (35.5 KiB)
eth0:avahi Link encap:Ethernet HWaddr 08:00:27:1D:BB:21
inet addr:169.254.4.55 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
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:2957 errors:0 dropped:0 overruns:0 frame:0
TX packets:2957 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4448536 (4.2 MiB) TX bytes:4448536 (4.2 MiB)
編集:ルーティングテーブルを追加:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0