Qt TCP服务器/多客户端消息读取

时间:2013-03-14 13:43:26

标签: c++ qt tcp

我正在研究客户端/服务器应用程序(使用qt for tcp)。 客户端必须每秒向服务器发送大约15条消息。 问题是:
来自客户端的消息以组的形式接收。我的意思是说: 当我收到readyRead()信号并且我从套接字读取数据时,缓冲区中有多条消息 这当然会导致系统滞后。

我尝试将传入连接放在单独的线程中(每个连接的线程),但没有任何改进 我每次收到readyRead()信号时都试图上升一个线程,但是没有什么......

但是当我在与服务器相同的PC上运行多个客户端时,一切似乎都可以。当在网络上使用不同的PC时,会出现滞后... (使用的网络是100Mbps LAN,消息<200KB,并且pc之间的ping是<5msec,所以我不认为这是网络问题)

在客户端,编写数据的代码非常简单:

tcpSocket->write(message.toUtf8());  
tcpSocket->waitForBytesWritten();  
tcpSocket->flush();

我也在没有flush()waitForBytesWritten()的情况下尝试了它,但是相同......

编辑:使用Qt 4.8.4和Windows 7和XP

任何人都知道如何克服这个问题? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

我最后一次遇到类似的问题是Qt3.3的QProcess的stdin / stdout通信。它在Linux和Windows上的表现完全不同。

最后我们发现在Linux上它使用select()在数据到达时异步反应(快速,大多数情况下只有一行可读),而在Windows上,新数据的存在是通过Qt主从Qt主循环查询的(大延迟,有几条消息可用)。我们尝试的一种解决方法是减少Qt源中的计时器周期,但最后我们根据本机操作系统机制切换到共享内存。

您的说明听起来像是在Windows操作系统上使用类似的Qt版本。