Java TCP 打孔
Posted
技术标签:
【中文标题】Java TCP 打孔【英文标题】:Java TCP Hole Punching 【发布时间】:2016-12-05 08:47:40 【问题描述】:我目前正在开发一款在线游戏。在游戏中,需要通过 TCP 和 UDP 从服务器向客户端发送数据。实现 UDP 打孔很容易,但我不太确定如何实现 TCP 打孔:
-
服务器:ServerSocket 监听给定端口 1
客户端:套接字(对象)使用端口 2 连接到端口 1 上的服务器
一旦建立连接,服务器会保留来自 server.accept() 的 Socket 对象,并在剩余时间内使用它向客户端发送数据
建立连接后,客户端关闭其 Socket 对象并在端口 2 上打开一个 ServerSocket。服务器现在可以使用端口 1 上的 Socket 对象将数据发送到端口 2。
3. 或 4. 是正确的方法吗?
【问题讨论】:
【参考方案1】:选项 3。
选项 4 不起作用,因为一旦客户端关闭套接字,双方都会关闭。服务器必须通过 NAT 防火墙启动连接,这显然行不通。
【讨论】:
以上是关于Java TCP 打孔的主要内容,如果未能解决你的问题,请参考以下文章