QT-websocket 服务端 实践

参考了别人的一些代码,总结出的一些经验

第一步,先新建一个项目

这里的选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);
    //重新监听端口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值