【发布时间】: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