在单个端口上制作多客户端 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 在某些时候导致太多滞后...

  1. 不要使用多个端口,这样做没有意义。如果您害怕 "cheaters",好吧,他们不妨尝试连接到不同的端口,这样您就回到了原点。

  2. 每个连接的 IP 地址和源端口号通常是唯一的。 NAT 设备(具有内部 IP 的家庭路由器)通常会为不同的连接分配不同的外部端口。所以源 IP + 源端口的组合 应该 是唯一的,并且在大多数情况下应该有效。现在关于边缘情况...由于可以在 UDP 中轻松伪造源 IP 和端口,因此您仍然需要自己的机制来验证用户流量。我的建议是使用您在第三点中建议的 ID。仅使用随机的、每个连接的 ID。如果您为每个连接使用一些较大的随机值(比如 128 bit UUID),那么任何人都不可能伪造它。事实上,你可能会接受一个小得多的随机数,比如 32 位(比如 TCP)。