Qt网络编程:QWebSocket发送文件 您所在的位置:网站首页 qt下载文件流 Qt网络编程:QWebSocket发送文件

Qt网络编程:QWebSocket发送文件

2024-01-18 20:08| 来源: 网络整理| 查看: 265

接上几篇关于websocket的内容,给websocket客户端加上发送文件功能

if(!WebSocket) return; QString path = QFileDialog::getOpenFileName(this, QString("打开文件"), "/", QString("Image File(*.* *.jpg *.jpeg *.png *.txt *.avi *.mp4)")); if(path.isEmpty()) return; QFileInfo info(path); QString file_name = info.fileName(); WebSocket->sendTextMessage("sendFileStart:" + file_name); QFile file(path); if(!file.open(QIODevice::ReadOnly)) { return; } QByteArray byte = file.readAll(); WebSocket->sendBinaryMessage(byte);//发送二进制消息 file.close();

发送文件之前先发送文件名称,发送原理是文件转成二进制流再发送

服务端处理:

void Widget::ReceivedMsg(const QString &message) { QJsonDocument jsonDocument = QJsonDocument::fromJson(message.toLatin1().data()); if(jsonDocument.isNull() ) { QWebSocket * webSocket = qobject_cast(sender()); if(message.startsWith("sendFile")) { receiverFileName = message.split(":").at(1); } else { ui->textEdit->append("收到消息:" + webSocket->origin() + " - " + message); } } else { QJsonObject obj = jsonDocument.object(); QString dst = obj["dst"].toString(); for (auto socket:webSocketList) { if(dst == socket->origin()) socket->sendTextMessage(message); } } } connect(webSocket,&QWebSocket::textMessageReceived,this,&Widget::ReceivedMsg); void Widget::onBinaryMessageReceived(const QByteArray &message) { QWebSocket * webSocket = qobject_cast(sender()); QFile file(receiverFileName); file.open(QFile::WriteOnly); file.write(message); file.close(); ui->textEdit->append("收到来自" + webSocket->origin() + "的文件:" + receiverFileName); }

代码:https://download.csdn.net/download/kenfan1647/13096937



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有