我目前正在开发一款在线游戏。在游戏中,需要通过 TCP 和 UDP 将数据从服务器发送到客户端。实现 UDP 打洞很容易,但我不太确定如何实现 TCP 打洞:
- 服务器:ServerSocket 监听给定端口 1
- 客户端:套接字(对象)使用端口 2 连接到端口 1 上的服务器
- 建立连接后,服务器会保留 server.accept() 中的 Socket 对象,并在剩余时间内使用它向客户端发送数据
- 建立连接后,客户端将关闭其 Socket 对象并在端口 2 上打开 ServerSocket。服务器现在可以使用端口 1 上的 Socket 对象向端口 2 发送数据。
3. 或 4. 是正确的方法吗?
最佳答案
选项 3。
选项 4 不起作用,因为一旦客户端关闭套接字,双方都会关闭。服务器必须跨 NAT 防火墙发起连接,这显然不起作用。
关于Java TCP 打洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679069/