【发布时间】:2020-04-20 20:57:21
【问题描述】:
我花了一些时间学习 UDP 连接,尤其是 Java 中的多播套接字。
我能够在我的本地网络上创建一个简单的多播套接字“群聊”,但我一直在尝试将其扩展到本地网络之外。
为了实现这一点,我在我的路由器上端口转发了一个 D 类 IP 地址,以允许其他人从我的网络外部访问我的多播组。
但是,当尝试通过我的公共 IP 和指定端口(在端口转发期间)连接到我的“群聊”时,我会收到以下错误消息...
Exception in thread "main" java.net.SocketException: Not a multicast address
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:310)
...
这个错误是有道理的,因为我的公共 IP 不是 D 类地址。但是既然我端口转发了一个多播地址到我路由器上的指定端口,那应该不会出现这个问题吧?
这是我的代码的相关部分...
InetAddress group = InetAddress.getByName("192.___.___.___"); // my public IP
MulticastSocket socket = new MulticastSocket(1234); // the port-forwarded port
socket.joinGroup(group);
我在哪里出错了,我该如何解决这个问题?
【问题讨论】:
-
组播路由与单播路由有很大不同。组播仅限于单个 LAN,除非路径中的所有路由器都配置了组播路由,这就是您无法在 Internet 上进行组播的原因。端口转发用于单播 NAPT,而不是多播。如果通过 Internet 建立隧道,则可以在站点之间使用多播,但并非所有隧道协议都支持多播。
标签: java networking multicast portforwarding multicastsocket