java广播数据包发送_在Java中广播UDP数据包的正确和有效方法是什么?

我需要在每个网络接口上广播UDP数据包.起初,我尝试播放到255.255.255.255,没有结果,后来我发现这个“已被弃用了大约20年”.因此,我尝试在每个网络接口上进行迭代,以获取接口的广播地址,然后将UDP数据包发送到该地址.

仍然,以下代码:

public static Collection getBroadcastAddresses() {

try {

Collection result = new LinkedList();

Enumeration nets = NetworkInterface.getNetworkInterfaces();

for (NetworkInterface netint : Collections.list(nets))

for (InterfaceAddress address : netint.getInterfaceAddresses()) {

InetAddress broadcastAddress = address.getBroadcast();

if (broadcastAddress != null)

result.add(broadcastAddress);

}

return result;

} catch (SocketException e) {

throw new RuntimeException(e);

}

}

public static void broadcast(int port,DatagramPacket packet,DatagramSocket socket,PrintWriter logger) throws IOException {

packet.setPort(port);

for (InetAddress address : getBroadcastAddresses()) {

logger.println("Broadcasting to: "+address);

packet.setAddress(address);

socket.send(packet);

}

}

打印这个东西:

Broadcasting to: /0.255.255.255

Broadcasting to: /255.255.255.255

Broadcasting to: /255.255.255.255

Broadcasting to: /255.255.255.255

Broadcasting to: /255.255.255.255

这真的很烦人.我是否应该为每个网络接口获取IP地址和网络掩码,并执行按位操作以“构建”正确的广播地址? This seems to me like Unix socket programming in C …是否有一种干净的Java方式可以巧妙地将可怜的UDP数据包传递给所有聚集我的网络的好友?

编辑:在网上搜索,结果发现这次我的代码没有被破坏.相反,JVM是.您从InterfaceAddress.getBroadcast()获得的数据是不一致的,至少在Windows 7下是这样.请参阅例如this和@L_404_2@:解决方案似乎设置了Java系统属性,以使其更喜欢IPv4 over IPv6,但这不是为我工作.即使有建议的解决方法,我在每次不同的运行中得到不同的结果,并且因为我得到的广播地址显然是随机的,我怀疑我从未定义的状态存储器位置获取数据.认真,严肃……

InterfaceAddress实现已中断.现在我遇到了一个很大的问题,因为我不知道如何开发这个网络应用程序. IP多播广泛不受支持.我只想在没有用户将其写在文本字段上的情况下向正确的UDP广播地址广播一些垃圾.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值