【问题标题】:Multiplayer networking only works on private network多人网络仅适用于专用网络
【发布时间】:2012-03-01 00:27:54
【问题描述】:

所以我正在制作一个简单的多人在线小程序游戏,并使用多播 UDP 套接字而不是典型的客户端-服务器连接对其进行测试。这并不意味着有效或安全,只是一个实验。唯一的问题是,当我尝试让其他人从他们家加入游戏时,它不会将他们连接到我,但是当我使用两台单独的计算机时,一台连接到无线网络,一台连接到 wifi,它可以无缝运行。他们可以加入自己的游戏并连接到自己的网络,但不能连接到其他人。我在这里错过了什么大事吗?我会贴出相关代码。

InetAddress group;
DatagramPacket packet;
DatagramPacket messagePacket;
MulticastSocket socket;

socket = new MulticastSocket(4446); //random port
group = InetAddress.getByName("228.5.6.7"); //multicast address
socket.joinGroup(group);

//typical code for sending a packet
packet = new DatagramPacket(messageBuf, messageBuf.length, group, 4446);

有什么想法吗?我对网络比较陌生,但发现它是一个有趣的挑战,并希望继续了解它。如果您在帮助我解决这个问题的基础上还有任何其他提示,我们将不胜感激。

【问题讨论】:

  • In order for Udp multicast to work, router must support it? 的可能副本。总之,您和您的伙伴之间至少有一台路由器不支持 UDP 多播。除非您控制所有网络基础设施,否则这很可能是一个无法解决的问题。
  • 悲伤的一天 :( 看起来我会在这个时候进行 lanning 哈哈。非常感谢您提供的信息,我会考虑自己提供服务。
  • 互联网上的多播从来没有成功过,曾经,在我尝试过的 15-20 次中。我认为,由于 IPv4 地址空间非常“小”,控制大型互联网路由器的人们的普遍共识是,如果人们试图在已经被占用的地址/组上使用自己的应用程序,他们会感到太困惑,他们只是决定不支持。据我所知,您有两个选择:1 - 使用 VPN,因此您可以通过多播,或者 2 - 等到国内连接更普遍地支持 IPv6(1 年?5?10?)并使用任播。

标签: java udp multicast


【解决方案1】:

您现在可能已经弄清楚了,但是是的,您遗漏了一个大问题。如果您在本地,它将始终有效,因为您的路由器不介意在专用 LAN 后面分发数据包。网络之外的任何东西都不会工作,因为客户端会尝试向服务器发送数据包,但服务器位于 NAT(网络地址转换)之后,并且由于路由器没有看到服务器首先发送数据包,路由器只会丢弃客户端的数据包并且永远不会连接。但是,如果服务器发出 udp 数据包尝试连接,路由器喜欢切换端口,因此您不知道数据包会从哪个端口发出。这就是路由器上的数据包转发。因此,当客户端发送数据包时,它会转到与预期不同的端口,路由器仍然会丢弃它。有“打孔”等解决方案。最简单的解决方案是在任何 NAT 之外有一个专用服务器来处理请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2023-02-13
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多