我的Java应用需要一些帮助。我需要在绑定到通配符地址的数据报套接字上接收广播数据包。最重要的是我的wlan0不应该有一个配置的IP地址,因为这个应用程序的目标是从服务器检索有效的IP,一种DHCP。
首先,我将wlan0配置为0.0.0.0
此外,我设置默认路由以通过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通配符地址。
答案 0 :(得分:0)
当然,bind()会抛出IOExceotion,因为套接字在构造时已经绑定了吗?
将新的DatagramSocket(null)更改为新的DatagramSocket(广播);删除bind()调用;并将新的InetSocketAddress()的第一个参数从“0.0.0.0”更改为null。
答案 1 :(得分:0)
在调用“setBroadcast”和“setSoTimeout”
之前执行“bind”调用