gpt4 book ai didi

java - 端口转发多播 IP

转载 作者:行者123 更新时间:2023-12-01 19:05:44 31 4
gpt4 key购买 nike

我花了一些时间学习 UDP 连接,特别是 Java 中的多播套接字。

我能够在本地网络上创建一个简单的多播套接字“群聊”,但此后我一直在尝试将其扩展到本地网络之外。

为了实现这一目标,我在路由器上端口转发了 D 类 IP 地址,以便允许其他人从网络外部访问我的多播组。

但是,当尝试通过我的公共(public) IP 和指定端口(在端口转发期间)连接到我的“群聊”时,我会收到以下错误消息...

Exception in thread "main" java.net.SocketException: Not a multicast address
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:310)
...

鉴于我的公共(public) IP 不是 D 类地址,此错误有一定道理。但由于我将多播地址端口转发到路由器上的指定端口,这个问题应该不会发生吗?

这是我的代码的相关部分...

InetAddress group = InetAddress.getByName("192.___.___.___"); // my public IP
MulticastSocket socket = new MulticastSocket(1234); // the port-forwarded port
socket.joinGroup(group);

我哪里出了问题,我该如何解决这个问题?

最佳答案

多播地址位于 224.0.0.0 - 239.255.255.255 之间,其中针对不同场景有不同的子范围。更多信息请参见:https://en.wikipedia.org/wiki/Multicast_address

因此,如果尝试加入 192.x.y.z 上的组,则这是一个无效的多播地址。这就是为什么你会抛出异常。

我可能错了,我怀疑大多数消费者/家庭 NAT,更不用说 ISP 支持多播流量了。 (提出问题 - 无论 MBONE 发生什么 - 我认为它会起飞并成为所有问题的解决方案。)

听起来您需要的是一个代理程序,该程序可以拦截多播流量并将其通过隧道传输到运行相同代码的不同网络上的代理。代理依次获取隧道数据包并重定向回多播\广播组。

使用广播套接字而不是多播可能会运气更好。

关于java - 端口转发多播 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59559183/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com