QT项目中
.pro文件:
QT += core gui
#获取串口列表倒包
QT += serialport
#创建websocket倒包
QT += websockets
inspection_server.h :
#ifndef __INSPECTION_SERVER_HPP__
#define __INSPECTION_SERVER_HPP__
#include <QWebSocketServer>
#include <QWebSocket>
#include <QObject>
#include <iostream>
#include <memory>
class InspectionServer;
typedef std::shared_ptr<QWebSocketServer> QWebSocketServerPtr;
typedef std::shared_ptr<QWebSocket> QWebSocketPtr;
typedef std::shared_ptr<InspectionServer> InspectionServerPtr;
class InspectionServer: public QObject
{
Q_OBJECT
QWebSocketServerPtr websocketServer;
QList<QWebSocketPtr> clients;
public:
InspectionServer(uint16_t port);
signals:
void closed();
private slots:
void onNewConnection();
void processTextMessage(const QString& message);
void socketDisconnected();
};
#endif
inspection_server.cpp文件:
#include "inspection_server.h"
#include <QDebug>
InspectionServer::InspectionServer(uint16_t port)
: websocketServer(new QWebSocketServer(QStringLiteral("Inspection server"), QWebSocketServer::NonSecureMode))
{
if(this->websocketServer->listen(QHostAddress::Any, port))
{
QObject::connect(websocketServer.get(), SIGNAL(newConnection()), this, SLOT(onNewConnection()));
}
else
{
throw std::runtime_error("InspectionServer: failed to listen");
}
}
void InspectionServer::onNewConnection()
{
qInfo() << "InspectionServer::onNewConnection";
QWebSocketPtr socket(this->websocketServer->nextPendingConnection());
QObject::connect(socket.get(), SIGNAL(textMessageReceived(const QString&)), this, SLOT(processTextMessage(const QString&)));
QObject::connect(socket.get(), SIGNAL(disconnected()), this, SLOT(socketDisconnected()));
this->clients.append(socket);
}
void InspectionServer::processTextMessage(const QString& message)
{
qInfo() << "InspectionServer::processTextMessage: " << message;
}
void InspectionServer::socketDisconnected()
{
qInfo() << "InspectionServer::socketDisconnected";
}
在main.cpp中调用、开启服务:
#include "mainwindow.h"
#include <QApplication>
//导入串口包
#include <QCoreApplication>
#include <QList>
#include <stdio.h>
#include <QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
//创建websocket
#include <QWebSocketServer>
#include "inspection_server.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// MainWindow w;
// w.show();
qDebug()<< "main.cpp执行了";
InspectionServer server(1234);
return a.exec();
}