#include "widget.h"
#include "ui_widget.h"
#include <QWebSocketServer>
#include <QWebSocket>
#include <QtNetwork/QAbstractSocket>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
WebSocketServer = new QWebSocketServer(QStringLiteral("testServer"),QWebSocketServer::NonSecureMode,this);
//QWebSocketServer::SslMode 运行模式:安全模式(SecureMode)wss,非安全模式(NonSecureMode)ws
connect(WebSocketServer, &QWebSocketServer::newConnection, this, &Widget::getNewConnection);
WebSocketServer->listen(QHostAddress::Any,9906);
}
Widget::~Widget()
{
delete ui;
for (auto socket:webSocketList)
{
socket->close();
}
WebSocketServer->close();
}
void Widget::getNewConnection()
{
if(WebSocketServer->hasPendingConnections()) //有未处理的连接
{
QWebSocket * webSocket = WebSocketServer->nextPendingConnection();
ui->textEdit->append(webSocket->origin() + "连接上了");
webSocketList << webSocket;
QListWidgetItem * item = new QListWidgetItem;
item->setText(webSocket->origin());
ui->listWidget->addItem(item);
connect(webSocket,&QWebSocket::disconnected,this,[webSocket,this]
{
ui->textEdit->append(webSocket->origin() + "断开连接了");
webSocketList.removeOne(webSocket);
for (int j = 0; j < ui->listWidget->count(); j++)
{
QListWidgetItem * item = ui->listWidget->item(j);
if (item->text() == webSocket->origin())
{
ui->listWidget->removeItemWidget(item);
delete item;
break;
}
}
webSocket->deleteLater();
});
connect(webSocket,&QWebSocket::textMessageReceived,this,&Widget::ReceivedMsg);
connect(webSocket, SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onError(QAbstractSocket::SocketError)));//这里参数是枚举 用qt5的方式这里编译不过
}
}
void Widget::ReceivedMsg(const QString &message)
{
QWebSocket * webSocket = qobject_cast<QWebSocket *>(sender());
ui->textEdit->append("收到消息:" + webSocket->origin() + " - " + message);
}
void Widget::onError(QAbstractSocket::SocketError error)
{
QWebSocket * webSocket = qobject_cast<QWebSocket *>(sender());
ui->textEdit->append(webSocket->origin() + "出错" + webSocket->errorString());
}
void Widget::on_pushButton_clicked()
{
QString text = ui->textEdit_2->toPlainText().trimmed();
if(text.isEmpty())
return;
if(ui->radioButton_all->isChecked())
{
if(webSocketList.size() == 0)
return;
for (auto socket:webSocketList)
{
socket->sendTextMessage(text);
}
ui->textEdit->append("服务端给所有连接发送:" + text);
}
else
{
if(!ui->listWidget->currentItem())
return;
QString current = ui->listWidget->currentItem()->text();
QWebSocket * webSocket = nullptr;
for (auto socket:webSocketList)
{
if(socket->origin() == current)
{
webSocket = socket;
break;
}
}
if(webSocket)
{
webSocket->sendTextMessage(text);
ui->textEdit->append("服务端给" + webSocket->origin() + "发送:" + text);
}
}
ui->textEdit_2->clear();
}
WebSocket-Qt服务器端
需积分: 0 118 浏览量
2023-03-31
16:01:27
上传
评论
收藏 6KB RAR 举报
小小小将
- 粉丝: 9
- 资源: 7
最新资源
- 百度地图,显示闸站分布,以及切换闸站位置,上传闸站图片信息的cordova插件,包含百度地图和百度定位库文件
- 基于合泰单片机的智能夹球小车(esp8266代码+k210代码+合泰单片机代码)
- 一个天气查询的安卓APP
- 基于CC2530+DHT11温湿度传感器实现物联网多传感器火灾报警系统
- 基于51单片机的简易计算器 / 具有加减乘除四则运算功能
- 学校端午节比赛dwj-master.zip
- 基于qt实现简单的加减乘除四则运算
- python爬虫案例python-graphs.rar
- python爬虫案例python-graphics.rar
- python爬虫案例python-geometry.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈