Java TCP 打洞

标签 java sockets tcp serversocket

我目前正在开发一款在线游戏。在游戏中,需要通过 TCP 和 UDP 将数据从服务器发送到客户端。实现 UDP 打洞很容易,但我不太确定如何实现 TCP 打洞:

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

3. 或 4. 是正确的方法吗?

最佳答案

选项 3。

选项 4 不起作用,因为一旦客户端关闭套接字,双方都会关闭。服务器必须跨 NAT 防火墙发起连接,这显然不起作用。

关于Java TCP 打洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679069/

相关文章:

Android okhttp 测量每个请求的 HTTP 设置时间

android如何使用xmpp-smack在群聊中发送和接收图像和位置(使用 map )

java - 抽象类错误 : Exception in thread "main" java. lang.NullPointerException

java - OpenGL ES 3.0 Java用颜色数组绘制顶点(每个顶点有不同的颜色)

java - 用于检查 xml 是否包含键和值的 XPath 表达式

java - 使用java的小型http服务器?

java - 使用 Apache POI 的 SXSSFSheet 从 xlsx 读取数据

sockets - UDP 套接字没有响应

java - 从服务器向所有客户端发送消息

Java TCP/IP 服务器不正确地关闭连接