java - 如何在 0.0.0.0 上接收广播包?

标签 java sockets broadcast dhcp datagram

我的 Java 应用程序需要一些帮助。我需要在绑定(bind)到通配符地址的数据报套接字上接收广播数据包。最重要的是我的 wlan0 不应该配置 IP 地址,因为这个应用程序的目标是从服务器检索有效 IP,类似于 DHCP。
首先,我在 0.0.0.0 上配置 wlan0。
此外,我将默认路由设置为通过 wlan0 接口(interface)(唯一可用的接口(interface))。
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() 上阻塞自己;

有没有办法在绑定(bind)到未配置(无 IP)接口(interface)的套接字上接收数据报?

我尝试给 wlan0 一个 IP,一切正常,但我需要不配置 wlan0,只绑定(bind)到 0.0.0.0 通配符地址。

最佳答案

bind() 肯定会抛出 IOExceotion,因为套接字在构造时已经绑定(bind)了吗?

将 new DatagramSocket(null) 更改为 new DatagramSocket(broadcast);删除 bind() 调用;并将 new InetSocketAddress() 的第一个参数从 '0.0.0.0' 更改为 null。

关于java - 如何在 0.0.0.0 上接收广播包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11243950/

相关文章:

java - 为现有 Pdf 创建目录

java - 加载 xlsx 包时出错

C#:如何在 Socket.BeginReceive 回调之前终止套接字?

android - 如何为另一个应用程序的广播接收器创建一个新的 Intent?

python - Numpy 广播数组

java - 在java中嵌套未定义数量的循环

java - 在 Artifact 的 pom 文件上运行 Maven 插件

c - 如何使用 connect() 获取内核分配给 UDP 套接字的本地地址?

vb.net 服务器 - 多个客户端不断处理不同的信息

sockets - 同一台 PC 上多个进程的 UDP 广播性能不佳