【问题标题】:Java: Determine receiving address when receiving with MulticastSocketJava:使用MulticastSocket接收时确定接收地址
【发布时间】:2010-09-21 06:29:48
【问题描述】:

我正在使用 MulticastSocket 接收 UDP 组播数据包。如何确定这样的数据包发送到哪个地址?使用提供的方法,我只能确定发件人地址。

当然,我是在创建监听套接字时设置 To-Address 的人,但我真的可以确定吗?广播包呢?以某种方式最终到达这里的数据包呢? 我真的很想区分数据包是否真的是多播。

谢谢!

更新:目前看来,刚刚发送到该端口的单播数据包也最终在多播套接字中接收():(绑定到设备也没有给我更好的结果

【问题讨论】:

  • 我很困惑。设置 MulticastSocket 时,您不将其绑定到特定地址吗?这不是任何人都可以用来发送给所有人的地址吗?即使信息包本身不可用,您也应该已经拥有这些信息。
  • 是的,但是请参阅我关于单播数据包的更新 :)
  • 这其中丑陋的部分是,Java 多播套接字似乎接收到与套接字端口匹配的任何多播地址的数据报。因此,如果一台服务器正在多播到 226.1.1.6:5003,而另一台正在多播到 226.2.1.99:5003,那么您的 Java 应用程序将收到所有数据包,并且无法解开它们。这与套接字加入的多播组无关。

标签: java udp multicast multicastsocket


【解决方案1】:

我对细节有点模糊,但是假设您设法有一条清晰的路径,一个多播数据包将被发送到您订阅的 ip/port 组合(并且此信息将在数据包中的某处)理解多播的中间路由器。如果你想确保多播套接字从正确的网络接口接收,有一堆函数可以将它绑定到特定的接口。

我认为您无法知道数据包是否“真正”多播,即有人总是可以伪造一个,因为没有内置真正的安全性。

【讨论】:

  • 我有同样模糊的回忆,快速重读 Steven 的 TCP/IP Illustrated 似乎证实了这一点。
  • 嗯,目前看来,刚刚发送到该端口的单播数据包也最终进入了多播套接字接收():(绑定到设备也没有给我更好的结果。
猜你喜欢
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多