Qt WebSockets,如何向客户端发送消息

Posted

技术标签:

【中文标题】Qt WebSockets,如何向客户端发送消息【英文标题】:Qt WebSockets, how to send a message to client 【发布时间】:2017-07-05 00:25:08 【问题描述】:

我正在关注这个示例http://doc.qt.io/qt-5/qtwebsockets-echoserver-example.html,但我不知道在建立连接后如何向客户端发送消息。

这似乎有效,但仅当它位于另一个类的函数内时。

void EchoServer::processTextMessage(QString message)


    m_clients.at(0)->sendTextMessage("test");


我应该把代码放在哪里/如何让它工作?

e。 G。在 MainWindow 中按下按钮后如何向客户端发送消息?

这是有效的

void EchoServer::processTextMessage(QString message)


      m_clients.at(0)->sendTextMessage("test");


这行不通

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);

    m_clients.at(0)->sendTextMessage("test");

 

不是这个

void MainWindow::myclicked()


 m_clients.at(0)->sendTextMessage("test");


【问题讨论】:

确保您运行 2 个单独的进程,并且客户端应该打开 QWebsocket 并监听 *received 信号。 doc.qt.io/qt-5/qwebsocket.html 当我第一次尝试时,它开始为我使用 sendTextMessage 服务器和 textMessageReceived 处理客户端的信号。现在,它可以在我们自己的服务器的生产代码中使用,更不用说“乒乓”了。 示例代码工作正常,回显消息也返回给客户端。我不明白我将 sendTextMessage 放在何处以及如何将消息从服​​务器发送到客户端。 e. G。在 MainWindow 中按下按钮后如何向客户端发送消息? 您必须运行 2 个 QWebsocket,而不是一个。一个发送TextMessage,另一个监听它的信号textMessageReceived。他们之间有一个特殊的服务器,以便推送工作。 【参考方案1】:

我让它工作了。代码如下:

QWebSocket *messageSocket;


void EchoServer::onNewConnection()

    QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
    connect(pSocket, &QWebSocket::textMessageReceived, this, &EchoServer::processTextMessage);
    connect(pSocket, &QWebSocket::disconnected, this, &EchoServer::socketDisconnected);


    m_clients << pSocket;

    messageSocket=pSocket;




void MainWindow::myclicked()

    if (messageSocket)
        

             messageSocket->sendTextMessage("test");
        


【讨论】:

以上是关于Qt WebSockets,如何向客户端发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WCF NetHttpBinding(WebSockets)通过服务器向所有客户端广播(推送)一个客户端发送的消息?

如果客户端更改了IP,WebSockets应用程序如何继续向客户端发送数据?

如何在烧瓶中发布请求后使用 websockets 向客户端发送警报

如何使用 websockets 通过 Flask 向特定用户发送消息?

如何在 Qt 中从服务器向连接的客户端发送消息

Web Sockets - 向所有客户端发送消息