在单个端口上制作多客户端 udp 服务器的最佳方法
Best way to make multi-client udp server on single port
我已经准备好了tcp多线程支持。
我为每个 tcp 连接创建一个线程。
现在我正在尝试添加 udp 支持。
与tcp相比,udp是无连接的。
我只看到三种处理方法。
1.Each 不同端口上的 udp 客户端。(寻找另一种方式)
2.Get udp 数据包的 ip 地址,然后通过 tcp 连接列表进行迭代...(这种方式很糟糕,因为每个 IP 我只能处理一个客户端。我知道很多人都有内部 ip = 一个 ip很多玩家)。
3.Each tcp 客户端也有唯一的 id(int)。我在连接到 server.I 时生成 id 可以尝试在 udp 数据包开始时发送这些 id。
(这种方式似乎不错,但是作弊者呢?如果他们只是编辑数据包并使用随机不同的 ID 重新发送,这将导致 playerX 在 posX 50 和 posY 50 上。并且会打开破解其他玩家的途径。
有什么不同的想法吗? :)
哪个是识别谁是谁的最佳方式?
我的游戏需要它作为 tcp 在某些时候导致太多滞后...
不要使用多个端口,这样做没有意义。如果您害怕 "cheaters",好吧,他们不妨尝试连接到不同的端口,这样您就回到了原点。
每个连接的 IP 地址和源端口号通常是唯一的。 NAT 设备(具有内部 IP 的家庭路由器)通常会为不同的连接分配不同的外部端口。所以源 IP + 源端口的组合 应该 是唯一的,并且在大多数情况下应该有效。现在关于边缘情况...由于可以在 UDP 中轻松伪造源 IP 和端口,因此您仍然需要自己的机制来验证用户流量。我的建议是使用您在第三点中建议的 ID。仅使用随机的、每个连接的 ID。如果您为每个连接使用一些较大的随机值(比如 128 bit UUID),那么任何人都不可能伪造它。事实上,你可能会接受一个小得多的随机数,比如 32 位(比如 TCP)。
我已经准备好了tcp多线程支持。
我为每个 tcp 连接创建一个线程。
现在我正在尝试添加 udp 支持。
与tcp相比,udp是无连接的。
我只看到三种处理方法。
1.Each 不同端口上的 udp 客户端。(寻找另一种方式)
2.Get udp 数据包的 ip 地址,然后通过 tcp 连接列表进行迭代...(这种方式很糟糕,因为每个 IP 我只能处理一个客户端。我知道很多人都有内部 ip = 一个 ip很多玩家)。
3.Each tcp 客户端也有唯一的 id(int)。我在连接到 server.I 时生成 id 可以尝试在 udp 数据包开始时发送这些 id。
(这种方式似乎不错,但是作弊者呢?如果他们只是编辑数据包并使用随机不同的 ID 重新发送,这将导致 playerX 在 posX 50 和 posY 50 上。并且会打开破解其他玩家的途径。
有什么不同的想法吗? :)
哪个是识别谁是谁的最佳方式?
我的游戏需要它作为 tcp 在某些时候导致太多滞后...
不要使用多个端口,这样做没有意义。如果您害怕 "cheaters",好吧,他们不妨尝试连接到不同的端口,这样您就回到了原点。
每个连接的 IP 地址和源端口号通常是唯一的。 NAT 设备(具有内部 IP 的家庭路由器)通常会为不同的连接分配不同的外部端口。所以源 IP + 源端口的组合 应该 是唯一的,并且在大多数情况下应该有效。现在关于边缘情况...由于可以在 UDP 中轻松伪造源 IP 和端口,因此您仍然需要自己的机制来验证用户流量。我的建议是使用您在第三点中建议的 ID。仅使用随机的、每个连接的 ID。如果您为每个连接使用一些较大的随机值(比如 128 bit UUID),那么任何人都不可能伪造它。事实上,你可能会接受一个小得多的随机数,比如 32 位(比如 TCP)。