Java TCP Hole Punching

Java TCP Hole Punching

问题描述:

我目前正在开发一个在线游戏。在游戏中,需要通过TCP和UDP将数据从服务器发送到客户端。实现UDP-冲孔很容易,但我真的不知道如何实现TCP孔打孔:Java TCP Hole Punching

  1. 服务器:监听指定端口1
  2. 客户端上的ServerSocket:插座(对象)连接到服务器上端口1使用端口2
  3. 建立连接后,服务器将server对象从server.accept()中保留下来,并使用它在剩余时间向客户端发送数据
  4. 建立连接后,客户端关闭它的Socket对象并在端口2上打开一个ServerSocket。服务器现在可以使用端口1上的Socket对象将数据发送到端口2上。

是3.还是4.正确的路要走?

选项3

选项4一旦客户关闭套接字双方关停不会因为工作。服务器将不得不通过NAT防火墙启动连接,这显然不起作用。