【问题标题】:Qt TCP server/multi-client message readingQt TCP服务器/多客户端消息读取
【发布时间】:2013-03-02 21:43:15
【问题描述】:

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

我尝试将传入连接放在单独的线程中(每个连接线程),但没有任何改进。
每次收到readyRead() 信号时,我也尝试启动一个线程,但又没有...

但是当我在与服务器相同的 PC 上运行多个客户端时,一切似乎都正常。在网络上使用不同的电脑时,会出现延迟... (使用的网络是 100Mbps LAN,消息

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

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

我也尝试过不使用flush()waitForBytesWritten() 但还是一样...

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

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

【问题讨论】:

    标签: c++ qt tcp


    【解决方案1】:

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

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

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

    【讨论】:

    • 我在 Windows 7/XP 上使用 qt 4.8.4。您能否提供有关您使用的解决方案的更多信息?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-01-28
    • 2015-10-08
    • 2014-09-08
    • 2016-03-18
    • 2013-04-29
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多