首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在0.0.0.0上接收广播数据包?

如何在0.0.0.0上接收广播数据包?
EN

Stack Overflow用户
提问于 2012-06-28 19:48:09
回答 2查看 1.4K关注 0票数 2

我的Java应用程序需要一些帮助。我需要在绑定到通配符地址的数据报套接字上接收广播数据包。最重要的是,我的wlan0不应该有一个已配置的IP地址,因为这个应用程序的目标是从服务器检索一个有效的IP。

首先,我在0.0.0.0上配置wlan0。

此外,我将默认路由设置为通过wlan0接口(唯一打开的接口)。

Ifconfig输出为:

代码语言:javascript
运行
复制
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)

这是我在客户机上创建套接字的方式:

代码语言:javascript
运行
复制
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通配符地址。

EN

回答 2

Stack Overflow用户

发布于 2012-06-28 21:26:25

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-06-29 14:11:46

在调用"setBroadcast“和"setSoTimeout”之前执行"bind“调用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11243950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档