操作系统中的 TCP 服务器差异

TCP server differences in operating systems

本文关键字:服务器 TCP 操作系统      更新时间:2023-10-16

我在Windows中开发了一个带有qt的tcp-server。 大约有10-20个客户端连接了服务器,服务器和客户端之间有数据传输。每个连接的客户端都有不同的线程。服务器发送数据包并等待回复该数据包,如果ACK接收到然后发送下一个数据包。如果没有回复,则会超时。如果客户端在 2 分钟内没有发送答案,我的服务器将再次发送相同的数据包。

这没有问题。(顺便说一下我的电脑 windows7 家庭高级版)当我使用 windows7 旗舰版将我的应用程序带到另一台计算机时,如果有超时,而不是再次发送相同的数据包,它不会执行任何操作。我的电脑和这台电脑之间的另一个区别是,这台电脑没有安装qt。我使用所需的 dll 运行我的应用程序。

什么会导致此问题?

提前谢谢。

首先要保持命名顺序:

  • IP 发送数据包
  • TCP 发送
  • 套接字发送数据流。(概念与标准::流不同)

IP被实现为设备驱动程序,TCP被实现为在其上运行的驱动程序,soket是链接到应用程序的库(可能是静态的或动态的),所有QT的东西都是一个使用套接字发送数据的库。

将流分成段的角色属于

套接字库,将段分解为数据包,枚举它们,检查是否缺少某些内容并请求迁移的角色属于TCP。

您的代码不应该处理所有这些问题:它只需要发送和接收数据,并管理底层套接字在持续且不可恢复的 TCP 故障时可能报告的错误条件。

定义 netwok 超时不是您的代码角色(有完善的定义标准,日期为 30+ 年:自己做其他事情只会让网络管理员的生活变得一团糟,并且不会为您的应用程序增加任何价值)

您的问题很可能是时序和"传输控制"与底层 TCP 协商时序之间的冲突(这也取决于双方驱动程序中的缓冲区大小,并且可能不仅取决于操作系统,还取决于操作系统随着时间的推移实际执行的时间),这使得两个控制系统以不稳定的方式进行改造。