操作系统中的 TCP 服务器差异
TCP server differences in operating systems
我在Windows中开发了一个带有qt的tcp-server。 大约有10-20个客户端连接了服务器,服务器和客户端之间有数据传输。每个连接的客户端都有不同的线程。服务器发送数据包并等待回复该数据包,如果ACK接收到然后发送下一个数据包。如果没有回复,则会超时。如果客户端在 2 分钟内没有发送答案,我的服务器将再次发送相同的数据包。
这没有问题。(顺便说一下我的电脑 windows7 家庭高级版)当我使用 windows7 旗舰版将我的应用程序带到另一台计算机时,如果有超时,而不是再次发送相同的数据包,它不会执行任何操作。我的电脑和这台电脑之间的另一个区别是,这台电脑没有安装qt。我使用所需的 dll 运行我的应用程序。
什么会导致此问题?
提前谢谢。
首先要保持命名顺序:
- IP 发送数据包
- TCP 发送段
- 套接字发送数据流。(概念与标准::流不同)
IP被实现为设备驱动程序,TCP被实现为在其上运行的驱动程序,soket是链接到应用程序的库(可能是静态的或动态的),所有QT的东西都是一个使用套接字发送数据的库。
将流分成段的角色属于套接字库,将段分解为数据包,枚举它们,检查是否缺少某些内容并请求迁移的角色属于TCP。
您的代码不应该处理所有这些问题:它只需要发送和接收数据,并管理底层套接字在持续且不可恢复的 TCP 故障时可能报告的错误条件。
定义 netwok 超时不是您的代码角色(有完善的定义标准,日期为 30+ 年:自己做其他事情只会让网络管理员的生活变得一团糟,并且不会为您的应用程序增加任何价值)
您的问题很可能是时序和"传输控制"与底层 TCP 协商时序之间的冲突(这也取决于双方驱动程序中的缓冲区大小,并且可能不仅取决于操作系统,还取决于操作系统随着时间的推移实际执行的时间),这使得两个控制系统以不稳定的方式进行改造。
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何将 c++ 中的客户端 TCP 的替身列表发送到 Matlab 中的 TCP 服务器?
- 从 tcp 服务器打开 8MP H264 流时出现问题
- TCP C++客户端从C#服务器接收字节数组
- TCP套接字(客户端-服务器)recv()返回-1值
- 通过TCP将数据从C++客户端发送到JSON服务器
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- Qt TCP服务器不从客户端读取数据
- C++ TCP 服务器比较字符串失败
- 提升 ASIO TCP 服务器架构
- 如何让客户端通过modbus-tcp协议与多个服务器通信?
- C# 客户端到C++服务器 Tcp 套接字连接错误
- 连接后连接丢失 ->服务器 TCP 提升。亚西奥
- 使用qt的多客户端/服务器TCP应用程序
- C++客户端到Java服务器(TCP/IP)
- 简单的客户机/服务器TCP c++
- 多客户端一服务器TCP c++