在单个端口上制作多客户端udp服务器的最佳方法

时间:2015-09-12 11:14:58

标签: java multithreading sockets networking udp

我已准备好tcp多线程支持 我为每个tcp连接创建一个线程 现在我正在尝试添加udp支持 与tcp相比,udp是无连接的 我只看到三种方法来处理它 1.每个udp客户端在不同的端口上。(寻找另一种方式)
2.获取udp数据包的ip地址然后通过tcp连接列表进行itterate ...(这种方式很糟糕,因为我每个IP只能处理一个客户端。我知道很多人都有内部ip =一个ip很多球员) 3.每个tcp客户端也有唯一的id(int)。我在连接到服务器时生成id。我可以尝试在udp包的beggining上发送这些id。 (这种方式似乎很好,但是对于骗子呢?如果他们只是编辑数据包并重新发送随机不同的id,这将导致玩家X在posX 50和posY 50上。并将打开方式来攻击其他玩家。
任何不同的想法? :) 这将是识别谁是谁的最佳方式? 我需要它来为我的游戏作为tcp在某一点造成太多的滞后......

1 个答案:

答案 0 :(得分:0)

  1. 不要使用多个端口,这样做没有意义。如果你害怕“欺骗者”,那么他们也可以尝试连接到不同的端口,这样你就可以回到正方形了。

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