【问题标题】:Can a UDP multicast server send packets outside LAN?UDP 多播服务器可以在局域网外发送数据包吗?
【发布时间】:2014-07-14 16:48:48
【问题描述】:

我正在制作多人游戏,其中玩家的动作通过网络发送,他们的位置存储在服务器中。有人告诉我,UDP 是最好的,因为它不依赖于持续连接,并且客户端是否丢失数据包也没关系。客户端可以在任何路由器上,不一定在服务器的 LAN 内。

是否可以设置一个客户端可以连接到的服务器,该服务器将定期向所有客户端发送附近对象/玩家位置的更新?

我不想向每个单独的客户端发送数据包,我听说多播可以解决这个问题,但我看到的每个示例都只通过本地网络发送数据包。我可以多播过去的路由器吗?如果可以,我如何在 Java 中做到这一点? (并像我不知道自己在做什么一样向我解释,这基本上是真的)

例如

服务器的 IP 地址为 71.10.200.133

客户端 A 的 IP 地址为 38.49.339.293

客户端 B 的 IP 地址为 37.28.487.388

...

客户端 Z 的 IP 地址为 43.38.382.949

客户端 A 向服务器发送有关玩家位置的更新

服务器向 B-Z 发送更新,而不向每个单独的客户端迭代数据包。我该如何做到这一点(如果可能的话)?

【问题讨论】:

  • 多播地址在 IPv4 中是 32 位。没有办法能够传达这么多的粒度。您集中的单个 IP 地址将具有 32 位数据/熵来定义它。
  • @hexafraction '这么多粒度' 是什么?你在说什么?
  • @EJP OP希望向26个给定的游戏客户端IP地址发送数据包。
  • @hexafraction 你可以用一个多播地址来做到这一点。这就是多播的意思。
  • 组播只是 UDP 发送到一个组播地址。为了让它移动到其他子网,路由器必须将它们传递到下一个接口。用于定义传送数据包的分层拓扑的多播订户协议退出,但可能不允许/在公共互联网路由器上实施。在 ipv6 上它是必需的。理论上,多播允许将单个数据包发送到数百万个端点,仅使用路由器来分发它们。

标签: sockets networking network-programming udp multicast


【解决方案1】:

当且仅当路由器允许时,多播将遍历路由器。除非您可以控制您和客户之间的所有路由器,否则您的问题的答案是否定的。

【讨论】:

  • 所以我应该只向每个客户端发送单独的数据包?
  • 你别无选择。
【解决方案2】:

多播数据包是广播,因此它们会到达该子网上的每个节点。对您来说,在网络上发送多播数据包不是一种有效且智能的数据发送方式。

对于基于 LAN 的流量:

多播就好了

但是,对于互联网流量,我建议:

UDP客户端

TCP客户端

用于基于 Internet 的流量,并可能用于基于 LAN 的多播(有点混淆)。

对于互联网流量:请记住,客户端需要首先启动连接,因为大多数路由器(家用)都有防火墙阻止所有新的从外到内的流量。因此,创建一个套接字以通过指定端口/端口侦听任何传入连接,并从那里使用您喜欢的任何数据包广播/发送方法

【讨论】:

    【解决方案3】:

    如果您有能力,您也可以选择使用多播代理或第 2 层 VPN。 L2TP,https://en.wikipedia.org/wiki/Layer_2_Tunneling_Protocol 第 2 层 VPN 将中继单播和多播数据包。 这基本上可以让您按照上面的 EJP 建议来控制路由器。 这个问题也有 3 年的历史,所以你现在可能已经想出了办法。

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多