我正在努力理解这个问题......
我想连接两个用户...
这些用户已经连接到 TCP 服务器,该服务器知道公共 IP 和连接 TCP 端口。我希望使用现有的服务器连接来在我的用户之间创建 p2p 连接,因为要求他们连接到另一个 UDP 服务器以了解他们所连接的公共端口有点多余。
是否有可能在不创建另一个服务器(这次是 UDP)的情况下解决这个问题?
答案1
我知道这个问题已经存在两年了,但是一直没有答案,所以我想提出一种处理这个问题的方法。
这实际上只适用于 UDP,因为它是无状态的,并且不适用于 TCP。您描述的与第三个“控制”服务器建立 TCP 连接的设置实际上是此设置的完美设置。我们将此处的各方称为“用户 A”、“用户 B”和“控制”。其工作原理如下:
- 用户 A 和用户 B 与控制端建立 TCP 连接。建立连接后,两个用户都会向控制端发送一个可以联系他们的端口。我们将用户 A 的端口称为“端口 X”,将用户 B 的端口称为“端口 Y”。
- 控制与用户 B 共享用户 A 的端口信息,反之亦然。
- 用户 A 从端口 X 向端口 Y 上的用户 B 发送一个 UDP 数据包。用户 B 的防火墙当然会拒绝这个数据包。
- 用户 B 从端口 Y 向端口 X 上的用户 A 发送一个 UDP 数据包。用户 A 的防火墙将在内部将此端口转发给用户 A,因为用户 A 的防火墙刚刚看到一个数据包通过端口 X 离开用户 A 并到达端口 Y 上的用户 B(由于它是 UDP,它不知道它被拒绝了),所以它假定从端口 Y 上的用户 B 发往端口 X 上的用户 A 的数据包是响应数据包,因此它让其通过。
- 用户 A 从端口 X 向端口 Y 上的用户 B 发送另一个 UDP 数据包,并且由于同样的原因,该数据包也被允许通过用户 B 的防火墙。
- 用户A和B现在可以来回发送UDP数据包,并且不再需要控制的参与。