【问题标题】:Problems testing my Java UDP peer to peer program测试我的 Java UDP 对等程序时出现问题
【发布时间】:2015-01-02 07:49:00
【问题描述】:

我已经使用名为“Packet Tester”的程序在本地测试了该程序

我为我的手机下载了 UDP 接收器/发送器。使用我计算机上的 java 程序,我能够将数据包发送到移动服务器,并且运行良好。我只是输入了手机 IP 地址和它正在侦听的端口号。

当我尝试在笔记本电脑和计算机上运行 UDP 点对点时,他们根本无法聊天。

有谁知道这是否与使用相同的路由器有关。这不应该是因为我的手机正在接收来自笔记本电脑和计算机的消息。 ]

Java 应用可以在本地检索 UDP 数据包,但不能从笔记本电脑或移动设备检索。移动设备可以从笔记本电脑和移动设备检索 udp 数据包。测试显示令人困惑的结果,这让我陷入了困境。

我很感激您对此有何看法。

谢谢。

【问题讨论】:

  • 同一路由器会给设备相同的 WAN IP 地址,所以这可能是您的问题。
  • @MichaelGoldstein 每台设备都有自己的 IP,但 **..*.4 PC **..*.2 移动设备 **..*.5 笔记本电脑
  • 听起来像是防火墙问题。
  • @chrylis 你知道如何解决这个问题吗?

标签: java sockets udp chat livechat


【解决方案1】:

问题可能是由于路由器完成了网络地址转换

我相信您正在向正确的 IP 地址发送数据包,但端口不正确。您可能将数据包发送到的端口是机器的本地端口。 您需要将数据包发送到路由器分配的端口。

当数据包通过路由器从计算机A到计算机B时,路由器将计算机的本地端口映射到某个随机端口。

因此,如果计算机 B 需要向计算机 A 发送数据包,则计算机 B 需要将其发送到路由器分配的 IP:port。然后路由器会将其转发到计算机A的本地IP:端口。

我建议首先了解当 UDP 数据包通过网络内部或外部的路由器时如何创建此映射。了解网络地址转换、UDP 打孔。

这些来源可能会有所帮助:

Network Address Translation

UDP Hole Punching

RFC 4787 NAT Behavioral Requirements UDP

RFC 5128 P2P across NAT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多