参考了别人的一些代码,总结出的一些经验
第一步,先新建一个项目
这里的选QDialog,QWidget也可以,项目名可以自己定义
语言可以无,然后选择你的编译器,然后完成
第二步,将你的布局做好
用到控件:Label,Spin Box, List Widget,Push Button
第三步,给你的两个点击控件加上消息映射,右键控件转到槽(clicked()),给Spin Box属性里的value值设置好
第四步,在项目头文件导入#include <QWebSocketServer> #include <QWebSocket>
#include <QAbstractSocket>
具体方法可以在帮助索引里面
把这个qmake加到你的pro文件里
第五步,在你的头文件把QWebSocketServer跟QList实例化
第六步,你就可以在你的cpp文件中添加功能了
在你的构造函数中添加这个代码
WebSocketServer = new QWebSocketServer(QStringLiteral("testServer"),QWebSocketServer::NonSecureMode,this);
//QWebSocketServer::SslMode 运行模式:安全模式(SecureMode)wss,非安全模式(NonSecureMode)ws
然后进行开关的定义,初始的时候只能点击连接服务器,所以会用到
ui->pushButton_disc->setEnabled(false);
//pushButton_disc是你的控件ID,setEnabled()函数是点击的权限
在on_pushButton_Start_clicked()函数中
int iport = ui->spinBox_Port->text().toUInt();
//从spinBox控件中获取value值,也就是端口号保存到int类型的iport
connect(WebSocketServer, &QWebSocketServer::newConnection, this, &SeverDialog::getNewConnection);
//当WebSocketServer对象接收到一个新的连接时,会触发newConnection信号,
//然后通过connect函数将这个信号连接到SeverDialog对象的getNewConnection槽函数上进行处理
iport = ui->spinBox_Port->text().toUInt();
WebSocketServer->listen(QHostAddress::Any,iport);
//从控件中获取端口号
第七步,就是关键的一部,要构造你的getNewConnection,处理你接收到的连接
void SeverDialog::getNewConnection(){
if(WebSocketServer->hasPendingConnections()) //有未处理的连接
{
QWebSocket * webSocket = WebSocketServer->nextPendingConnection();
//接受到一个新的Websocket连接,`nextPendingConnection()`函数用于获取下一个等待连接的WebSocket。
//`webSocket`是一个指向新连接的`QWebSocket`对象的指针。
ui->textEdit->append("连接上了");
//用于在界面上显示连接成功的消息
webSocketList << webSocket;
//将webSocket连接添加到连接列表中,方便管理多个链接
connect(webSocket,&QWebSocket::textMessageReceived,this,&SeverDialog::ReceivedMsg);
connect(webSocket, SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onError(QAbstractSocket::SocketError)));
}
}
第八步,这里的getNewConnection函数的两个connect需要两个函数处理
void SeverDialog::ReceivedMsg(const QString &message)
{
ui->textEdit->append("收到消息:"+ message);
}
void SeverDialog::onError(QAbstractSocket::SocketError error)
{
QWebSocket * webSocket = qobject_cast<QWebSocket *>(sender());
ui->textEdit->append("连接出错" + webSocket->errorString());
}
第九步,on_pushButton_disc_clicked()函数,关闭连接
WebSocketServer->close();//关闭服务
iport = ui->spinBox_Port->text().toUInt();
WebSocketServer->listen(QHostAddress::Any,iport);
//重新监听端口