在单端口上实现多客户端udp服务器的最佳方式



我已经准备好了tcp多线程支持。
每个tcp连接创建一个线程。
现在我正在尝试添加udp支持。
与tcp相比,udp是无连接的。
我认为只有三种处理方法。
1.每个udp客户端在不同的端口上。(寻找另一种方式)
2.获取udp报文的ip地址,然后在tcp连接列表中迭代…(这种方式是蹩脚的,因为我将能够处理每一个IP只有一个客户端。我知道很多人都有内部ip =一个ip =很多玩家)。3.每个tcp客户端也有唯一的id(int)。我在连接到服务器时生成id。我可以试着在udp包的开头发送这些id。(这种方式似乎很好,但对于作弊者来说呢?如果他们只是编辑数据包并重新发送随机不同的id,这将导致playerX在posx50和posx50上。)并且将开放攻击其他玩家的方式。
有什么不同的想法吗?:)鉴别谁是谁的最好方法是什么?我需要在我的游戏中使用它,因为tcp在某些时候会导致太多延迟。

  1. 不要使用多个端口,这样做没有意义。如果你害怕"骗子",那么,他们可能会尝试连接到另一个端口,所以你又回到了起点。

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

最新更新