【问题标题】:Multi-client / server tcp application using qt使用 qt 的多客户端/服务器 tcp 应用程序
【发布时间】:2012-11-25 13:55:40
【问题描述】:

我正在做一个项目,该项目需要“主”应用程序和多个“仆人”之间的 tcp 通信。 (项目是c++,我也在用qt)

“仆人”将进行一些处理并将其结果发送给“主人”。 到目前为止,它是一个简单的多客户端-服务器应用程序。

问题是,主人会在随机的时间向仆人索取一些额外的信息,甚至发送信息来改变他们的处理方式。

如果我的项目基于 Fortune 客户端/服务器示例,我是否能够从主人那里向仆人发送消息? (有什么想法吗?)

或者我是否需要将我的工作建立在其他东西上(比如聊天客户端?)?

欢迎任何其他关于 tcp 客户端/服务器通信的建议,但由于我已经使用 qt,我不想添加其他库....

提前谢谢你!

【问题讨论】:

  • 一旦客户端(“servants”)与服务器(“master”)应用程序建立了连接,该连接就可供双方使用。服务器可以向客户端发送请求,反之亦然。

标签: c++ qt tcp client-server


【解决方案1】:

在 Qt 中构建服务器非常简单。您必须派生 QTcpServer 并实现一些方法或插槽。这对客户也有效。 派生QTcpSocket,您将拥有您的客户端。

例如,要检测客户端传入,您可以实现 virtual void incomingConnection (int socketDescriptor)。因此,在您的情况下,您可以将传入的客户端保存在地图中(地图,因为每个客户端都有自己的id)。

在服务器和客户端中,您可能都希望实现 readyRead() 插槽。 这个插槽做你想要的通信事情。事实上,在这个槽内,服务器可以接收和发送给客户端消息,反之亦然。

这是一个典型的readyread

  void Client::readyRead() {
     while (this->canReadLine()) {
            // here you get the message from the server
        const QString& line = QString::fromUtf8(this->readLine()).trimmed();
     }
 }

这是发送消息的方式:

void Client::sendMessage(const QString& message) {
    this->write(message.toUtf8());
    this->write("\n");
}

就是这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2011-03-21
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2019-04-18
    相关资源
    最近更新 更多