我使用QTCPSocket
连接到TCP服务器(它运行在Ubuntu上)。服务器至少每40ms发送一个1字节的数据包。我的应用程序是实时的,所以重要的是我尽可能快地接收数据,但需要额外的网络通信量。Windows套接字TCP客户端每200毫秒接收一次数据(QTCPSocket)
从Windows连接TCP客户端后,我开始接收数据包。但是,QTCPSocket
的readyRead()
信号只能每200毫秒发送一次(包中有5个字节)。我看过Wireshark中的数据包,它们实际上是5字节的数据包。
但是,在Mac上使用QTCPSocket
(实际上是完全相同的代码),我每次都得到单独的数据包,所有发送的1字节数据包都以单字节数据包的形式发送,这非常棒。
我试着创建一个原始的Windows套接字(不使用QTCPSocket
),并在Windows上获得与QTCPSocket
相同的行为。
导致Mac套接字以更高时间分辨率接收数据包的区别是什么?有什么我可以在setsockopt()
设置,这将防止200毫秒的缓冲发生?
我知道在服务器端设置TCP_NODELAY
可能会解决我的问题,但看到Mac TCP Client按预期工作时,必须有一种方法可以在Windows上获得相同的行为。
设置'mySocket-> setSocketOption(QAbstractSocket :: LowDelayOption,1);'在服务器端是我发现的唯一方法来解决这个问题 – oggmonster 2013-02-15 15:48:23
您尝试先修复协议?因为这对我来说一直都很有用。 – 2013-02-15 16:53:21
TCP是一个流媒体协议。对于这种用法,UDP可能会更好。 – 2013-02-15 20:17:06