sockets - 使用静态端口配置从 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 和服务器 1 发送和接收消息
- 当客户端 2 想向服务器 2 发送消息时,客户端 1 断开与服务器 1 的连接,客户端 2 连接到服务器 2
- 客户端 2 和服务器 2 发送和接收消息
- 当客户端 1 想向服务器 1 发送消息时,客户端 2 断开与服务器 2 的连接,客户端 1 连接到服务器 1
- 不断重复
可能吗?既然是需要按照静态端口配置来实现的场景,那么使用两个客户端端口的情况是无从谈起的。
我根据上面的场景进行了测试,但是在尝试重新连接连接后断开的套接字时出现问题。连接失败。在wireshark中捕获的数据包如下
- 客户端尝试通过发送 SYNC 数据包连接到服务器(TCP 端口号重用,seq : 0)
- 服务器回复 ACK 数据包。(不是SYNC ACK,seq:1,ack:4294901759)
- 客户端发送RST数据包。(序列号:4294901759)
参看。我使用了 SO_REUSEADDR 套接字选项。
解决方案
推荐阅读
- javascript - 如何在 Angular 中向 amCharts 项目符号添加点击监听器?
- ruby-on-rails - 在提交表单之前检查 simple_form f.input 值
- text - SwiftUI:下划线的宽度
- java - 如何从 Android 应用上传/下载文件到 Oracle 云基础设施对象存储 (OCI)
- ios - iOS:通过代码打开通用链接
- react-native - 从其他组件更改状态(不通过 setState 函数)
- algorithm - 从 1d、3d 中的位置获取螺旋索引
- node.js - 如何修复对象“未定义的属性”keyv/discordjs
- datetime - 从指定的 dateTime Kotlin Android 获取几个小时前的 dateTime
- python - Keras 保存和加载导致准确性差?