1.pro  添加

QT += websockets
#ifndef MYWEBSOCKETSERVER_H
#define MYWEBSOCKETSERVER_H #include <QObject>
#include <QtWebSockets/QWebSocket>
#include <QtWebSockets/QWebSocketServer>
#include <QList>
#include <QByteArray> class MyWebSocketServer : public QObject
{
Q_OBJECT
public:
explicit MyWebSocketServer(quint16 port, bool debug = false, QObject *parent = nullptr);
~MyWebSocketServer();
signals:
void closed();
public slots:
void onNewConnection();
void processTextMessage(QString message);
void processBinaryMessage(QByteArray message);
void socketDisconnected();
private:
QWebSocketServer *m_pWebSocketServer;
QList<QWebSocket *> m_clients;
bool m_debug;
}; #endif // MYWEBSOCKETSERVER_H
#include "mywebsocketserver.h"
//! [constructor]
MyWebSocketServer::MyWebSocketServer(quint16 port, bool debug, QObject *parent) :
QObject(parent),
m_pWebSocketServer(new QWebSocketServer(QStringLiteral("Echo Server"),
QWebSocketServer::NonSecureMode, this)),
m_debug(debug)
{
if (m_pWebSocketServer->listen(QHostAddress::Any, port)) {
if (m_debug)
qDebug() << "websocket server listening on port" << port;
connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
this, &MyWebSocketServer::onNewConnection);
connect(m_pWebSocketServer, &QWebSocketServer::closed, this, &MyWebSocketServer::closed);
}
}
//! [constructor] MyWebSocketServer::~MyWebSocketServer()
{
m_pWebSocketServer->close();
qDeleteAll(m_clients.begin(), m_clients.end());
} //! [onNewConnection]
void MyWebSocketServer::onNewConnection()
{ QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
qDebug() << "onNewConnection:"<<pSocket->peerAddress(); connect(pSocket, &QWebSocket::textMessageReceived, this, &MyWebSocketServer::processTextMessage);
connect(pSocket, &QWebSocket::binaryMessageReceived, this, &MyWebSocketServer::processBinaryMessage);
connect(pSocket, &QWebSocket::disconnected, this, &MyWebSocketServer::socketDisconnected); m_clients << pSocket;
}
//! [onNewConnection] //! [processTextMessage]
void MyWebSocketServer::processTextMessage(QString message)
{
// QWebSocket *pClient = qobject_cast<QWebSocket *>(sender()); // qDebug() <<pClient;
// if (m_debug)
// qDebug() << "Message received:" << message;
// if (pClient) {
// qDebug() << "sendTextMessage:" << message;
// pClient->sendTextMessage(message);
// } if(m_clients.count ()>){
qDebug() << "sendTextMessage:" << message;
m_clients.at(m_clients.count()-)->sendTextMessage (message);
} }
//! [processTextMessage] //! [processBinaryMessage]
void MyWebSocketServer::processBinaryMessage(QByteArray message)
{
QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
if (m_debug)
qDebug() << "Binary Message received:" << message;
if (pClient) {
pClient->sendBinaryMessage(message);
}
}
//! [processBinaryMessage] //! [socketDisconnected]
void MyWebSocketServer::socketDisconnected()
{
qDebug() << "socketDisconnected:";
QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
if (m_debug)
qDebug() << "socketDisconnected:" << pClient;
if (pClient) {
m_clients.removeAll(pClient);
pClient->deleteLater();
}
}
//! [socketDisconnected]

最新文章

  1. zabbix自定义key
  2. C#设计模式系列:代理模式(Proxy)
  3. LeetCode Counting Bits
  4. fastboot 教程
  5. HTML5自学笔记[ 15 ]canvas绘图实例之钟表
  6. 锋利的jquery学习笔记
  7. 在PHP中如何使用消息列队
  8. php基础知识【oop/mvc/orm/aop】
  9. 【转】Android Activity和Intent机制学习笔记----不错
  10. Vue2.0 v-for 中 :key 到底有什么用?
  11. [LeetCode] Add One Row to Tree 二叉树中增加一行
  12. Python中str字符串的功能介绍
  13. net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建
  14. 【单调队列优化dp】 分组
  15. sql server 2005中的分区函数用法(partition by 字段)
  16. 2018-12-09 疑似bug_中文代码示例之Programming in Scala笔记第九十章
  17. Python cffi学习(二)
  18. 获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等)
  19. CSS外观属性
  20. PostgreSQL 空间处理函数

热门文章

  1. C# FileSystemWatcher 并发
  2. Eruda 一个被人遗忘的移动端调试神器
  3. vue通过自定义指令 v-py 将名字转拼音
  4. 计算机网络基础知识-OSI七层协议模型
  5. 近期学习docker遇到的一些问题
  6. 线程池、进程池(concurrent.futures模块)和协程
  7. 帝国cms打开慢
  8. go/node/python 多进程与多核cpu
  9. 深入理解JVM(5)——垃圾收集和内存分配策略
  10. MySQL数据目录(data)迁移