欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 使用 Qt5WebSockets 模块来实现 WebSocket 客户端和服务器

使用 Qt5WebSockets 模块来实现 WebSocket 客户端和服务器

2024/10/24 1:55:26 来源:https://blog.csdn.net/melonbo/article/details/140642907  浏览:    关键词:使用 Qt5WebSockets 模块来实现 WebSocket 客户端和服务器

WebSocket 服务器

// websocketserver.h
#ifndef WEBSOCKETSERVER_H
#define WEBSOCKETSERVER_H#include <QObject>
#include <QWebSocketServer>
#include <QWebSocket>class WebSocketServer : public QObject
{Q_OBJECT
public:explicit WebSocketServer(quint16 port, QObject *parent = nullptr);~WebSocketServer();private slots:void onNewConnection();void processTextMessage(QString message);void socketDisconnected();private:QWebSocketServer *m_pWebSocketServer;QList<QWebSocket *> m_clients;
};#endif // WEBSOCKETSERVER_H
// websocketserver.cpp
#include "websocketserver.h"WebSocketServer::WebSocketServer(quint16 port, QObject *parent) :QObject(parent),m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Echo Server"),QWebSocketServer::NonSecureMode,this))
{if (m_pWebSocketServer->listen(QHostAddress::Any, port)) {connect(m_pWebSocketServer, &QWebSocketServer::newConnection,this, &WebSocketServer::onNewConnection);qDebug() << "WebSocket server listening on port" << port;}
}WebSocketServer::~WebSocketServer()
{m_pWebSocketServer->close();qDeleteAll(m_clients.begin(), m_clients.end());
}void WebSocketServer::onNewConnection()
{QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();connect(pSocket, &QWebSocket::textMessageReceived,this, &WebSocketServer::processTextMessage);connect(pSocket, &QWebSocket::disconnected,this, &WebSocketServer::socketDisconnected);m_clients << pSocket;
}void WebSocketServer::processTextMessage(QString message)
{QWebSocket *pSender = qobject_cast<QWebSocket *>(sender());if (pSender) {pSender->sendTextMessage(message); // Echo message back to sender}
}void WebSocketServer::socketDisconnected()
{QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());if (pClient) {m_clients.removeAll(pClient);pClient->deleteLater();}
}

WebSocket 客户端

// websocketclient.h
#ifndef WEBSOCKETCLIENT_H
#define WEBSOCKETCLIENT_H#include <QObject>
#include <QWebSocket>class WebSocketClient : public QObject
{Q_OBJECT
public:explicit WebSocketClient(const QUrl &url, QObject *parent = nullptr);private slots:void onConnected();void onTextMessageReceived(QString message);private:QWebSocket m_webSocket;QUrl m_url;
};#endif // WEBSOCKETCLIENT_H
// websocketclient.cpp
#include "websocketclient.h"
#include <QDebug>WebSocketClient::WebSocketClient(const QUrl &url, QObject *parent) :QObject(parent),m_url(url)
{connect(&m_webSocket, &QWebSocket::connected,this, &WebSocketClient::onConnected);connect(&m_webSocket, &QWebSocket::disconnected,this, [](){ qDebug() << "WebSocket disconnected"; });m_webSocket.open(QUrl(url));
}void WebSocketClient::onConnected()
{qDebug() << "WebSocket connected";connect(&m_webSocket, &QWebSocket::textMessageReceived,this, &WebSocketClient::onTextMessageReceived);m_webSocket.sendTextMessage(QStringLiteral("Hello, world!"));
}void WebSocketClient::onTextMessageReceived(QString message)
{qDebug() << "Message received:" << message;
}

main.cpp

#include <QCoreApplication>
#include "websocketserver.h"
#include "websocketclient.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);WebSocketServer server(1234); // 创建服务器,监听端口 1234WebSocketClient client(QUrl(QStringLiteral("ws://localhost:1234"))); // 创建客户端,连接到服务器return a.exec();
}

代码说明

  1. WebSocketServer 类:实现了一个简单的 WebSocket 服务器。服务器监听新连接,并回显收到的消息。
  2. WebSocketClient 类:实现了一个简单的 WebSocket 客户端。客户端连接到服务器,发送一条消息,并输出接收到的消息。
  3. main.cpp:启动 WebSocket 服务器和客户端。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com