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 打孔的主要内容,如果未能解决你的问题,请参考以下文章

在 http 上打孔

Delphi:TCP 打孔

TCP打孔(NAT穿越)库还是啥?

用于 UDP NAT 打孔的 PHP 和 Java...?

为啥这种方式的 TCP 打孔不起作用?

iPhone上的TCP打孔