我正在使用QTCPSocket
连接到 TCP 服务器(在 Ubuntu 上运行)。服务器至少每 40 毫秒发送一个 1 字节的数据包。我的应用程序是实时的,因此以增加网络流量为代价尽可能快地接收数据非常重要。
从 Windows 连接 TCP 客户端后,我开始接收数据包。但是,readyRead()
来自 的信号QTCPSocket
仅每 200 毫秒发出一次(数据包中有 5 个字节)。我查看了 Wireshark 中的数据包,它们实际上是 5 字节的数据包。
但是,QTCPSocket
在 Mac 上使用(实际上是完全相同的代码),我每次都会收到单独的数据包,我发送的所有 1 字节数据包都作为单字节数据包到达,这很棒。
我尝试创建一个原始 Windows 套接字(不使用QTCPSocket
),并获得与QTCPSocket
Windows 相同的行为。
导致 Mac 套接字以更高的时间分辨率接收数据包的区别是什么?有什么我可以设置的东西可以setsockopt()
防止这 200 毫秒的缓冲发生吗?
我知道TCP_NODELAY
在服务器端设置可能会解决我的问题,但是看到 Mac TCP 客户端按预期工作,必须有一种方法可以在 Windows 上获得相同的行为。