首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >端口转发组播IP

端口转发组播IP
EN

Stack Overflow用户
提问于 2020-01-02 14:31:37
回答 1查看 800关注 0票数 0

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

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

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

然而,当我尝试通过我的公网IP和指定的端口连接到我的“群聊”时(在端口转发过程中),我会收到以下错误消息...

代码语言:javascript
复制
Exception in thread "main" java.net.SocketException: Not a multicast address
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:310)
...

考虑到我的公网IP不是D类地址,这个错误是有意义的。但是,由于我将组播地址端口转发到了路由器上的指定端口,这个问题不应该发生吗?

以下是我的代码的相关部分...

代码语言:javascript
复制
InetAddress group = InetAddress.getByName("192.___.___.___"); // my public IP
MulticastSocket socket = new MulticastSocket(1234); // the port-forwarded port
socket.joinGroup(group);

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

EN

回答 1

Stack Overflow用户

发布于 2020-01-02 15:47:22

组播地址在具有不同子范围的224.0.0.0 - 239.255.255.255之间,用于不同的场景。更多信息请点击这里:https://en.wikipedia.org/wiki/Multicast_address

因此,通过尝试在192.x.y.z加入组,这是一个无效的组播地址。这就是抛出异常的原因。

我可能错了,我怀疑大多数消费者/家庭NAT,只有更少的ISP支持组播流量。(回避问题-无论MBONE发生了什么-我认为这应该是解决所有问题的方法。)

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59559183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档