簡體   English   中英

端口轉發組播 IP

[英]Port-forwarding a Multicast IP

我花了一些時間學習 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);

我哪里出錯了,我該如何解決這個問題?

多播地址在224.0.0.0 - 239.255.255.255之間,針對不同的場景有不同的子范圍。 更多信息: https : //en.wikipedia.org/wiki/Multicast_address

因此,通過嘗試加入192.xyz的組,這是一個無效的多播地址。 這就是您拋出異常的原因。

我可能弄錯了,我懷疑大多數消費者/家庭 NAT,更不用說 ISP 支持多播流量了。 (提出問題 - 無論 MBONE 發生了什么 - 我認為這會成功並成為一切的解決方案。)

聽起來您需要的是一個代理程序,它可以攔截多播流量並將其通過隧道傳輸到運行相同代碼的不同網絡上的代理。 代理依次接收隧道數據包並重定向回多播\\廣播組。

使用廣播套接字而不是多播可能會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM