有没有办法在Windows上用Java中的DatagramSocket忽略广播的UDP消息?

时间:2011-09-13 17:50:14

标签: java sockets broadcast

我正在寻找一种不接收DatagramSocket广播消息的方法。实现似乎隐藏了目标地址,因此我不能将其用作过滤器。设置setBroadcast似乎什么都不做。

我有一个绑定在本地IP地址的套接字,但它仍然接收来自子网的所有广播消息。

InetAddress addr = InetAddress.getByName("1.2.3.4");
InetSocketAddress sockaddr = new InetSocketAddress(addr, 12345);
DatagramSocket socket = new DatagramSocket(sockaddr);

过滤广播消息并仅接收直接发送到我的IP的消息最简单的方法是什么?

编辑:简短的回答是否定的。这个问题源于我们有UDP消息的自定义路由的架构,子网中的一些节点不一定是广播或对广播感兴趣。还有其他问题,我们最终修改了架构。

1 个答案:

答案 0 :(得分:0)

这是一个simple Java application using UDP packets,它显示使用DatagramPacket类发送和接收UDP数据报并查询各个字段,例如发件人的IP地址。因此,如果您可以使用发件人的IP地址作为是否应该处理或忽略该邮件的指示,这可以帮助您。

如果您正在使用类DatagramSocket,收到的UDP数据报包含标题信息,您可以根据此DatagramSocket documentation解析它。来自wikipedia on User Datagram Protocol的这篇文章讨论了UDP数据报的格式和结构。

所以问题是你是否可以列出允许的邮件发件人列表,或者某种方法来过滤掉不允许的发件人。

另一种选择是在数据报中提供某种识别信息或签名,以便您识别允许的数据报与被忽略的数据报。你没有提到广播的类型,但也许你可以忽略任何小于指定字节数或类似的东西。或者,您可以忽略来自特定端口范围的任何数据报,或仅允许来自特定端口范围的数据报。