首页 > 解决方案 > 使用静态端口配置从 tcp 中的一个客户端套接字连接两个服务器套接字

问题描述

我正在尝试在 C++ 中创建一个简单的 tcp 端点类。我将在下面解释我的测试场景。

ex) 两个客户端共享一个端口。tcp 客户端 1(IP:172.17.0.2,端口:7000) tcp 客户端 2(IP:172.17.0.2,端口:7000)

tcp 服务器 1(IP:172.17.0.3,端口:7001) tcp 服务器 2(IP:172.17.0.3,端口:7002)

  1. 客户端 1 连接到服务器 1
  2. 客户端 1 和服务器 1 发送和接收消息
  3. 当客户端 2 想向服务器 2 发送消息时,客户端 1 断开与服务器 1 的连接,客户端 2 连接到服务器 2
  4. 客户端 2 和服务器 2 发送和接收消息
  5. 当客户端 1 想向服务器 1 发送消息时,客户端 2 断开与服务器 2 的连接,客户端 1 连接到服务器 1
  6. 不断重复

可能吗?既然是需要按照静态端口配置来实现的场景,那么使用两个客户端端口的情况是无从谈起的。

我根据上面的场景进行了测试,但是在尝试重新连接连接后断开的套接字时出现问题。连接失败。在wireshark中捕获的数据包如下

  1. 客户端尝试通过发送 SYNC 数据包连接到服务器(TCP 端口号重用,seq : 0)
  2. 服务器回复 ACK 数据包。(不是SYNC ACK,seq:1,ack:4294901759)
  3. 客户端发送RST数据包。(序列号:4294901759)

参看。我使用了 SO_REUSEADDR 套接字选项。

标签: socketstcp

解决方案


推荐阅读