Java TCP 打孔
Java TCP Hole Punching
我目前正在开发一款在线游戏。在游戏中,需要通过 TCP 和 UDP 将数据从服务器发送到客户端。实现 UDP 打孔很容易,但我不太确定如何实现 TCP 打孔:
- 服务器:ServerSocket 侦听给定端口 1
- 客户端:套接字(对象)使用端口 2 连接到端口 1 上的服务器
- 建立连接后,服务器会保留来自 server.accept() 的 Socket 对象,并在剩余时间内使用它向客户端发送数据
- 建立连接后,客户端关闭其 Socket 对象并在端口 2 上打开 ServerSocket。服务器现在可以使用端口 1 上的 Socket 对象将数据发送到端口 2。
3. 或 4. 是正确的方法吗?
选项 3。
选项 4 不起作用,因为一旦客户端关闭套接字,双方都会关闭。服务器必须启动跨 NAT 防火墙的连接,这显然行不通。
我目前正在开发一款在线游戏。在游戏中,需要通过 TCP 和 UDP 将数据从服务器发送到客户端。实现 UDP 打孔很容易,但我不太确定如何实现 TCP 打孔:
- 服务器:ServerSocket 侦听给定端口 1
- 客户端:套接字(对象)使用端口 2 连接到端口 1 上的服务器
- 建立连接后,服务器会保留来自 server.accept() 的 Socket 对象,并在剩余时间内使用它向客户端发送数据
- 建立连接后,客户端关闭其 Socket 对象并在端口 2 上打开 ServerSocket。服务器现在可以使用端口 1 上的 Socket 对象将数据发送到端口 2。
3. 或 4. 是正确的方法吗?
选项 3。
选项 4 不起作用,因为一旦客户端关闭套接字,双方都会关闭。服务器必须启动跨 NAT 防火墙的连接,这显然行不通。