Qt笔记(六十九)之QWebSocket传输文件

104 篇文章 126 订阅

一.前言
楼主在Qt笔记(三十五)之QWebSocket简单使用(1)-实现服务端
以及Qt笔记(三十六)之QWebSocket简单使用(2)-实现客户端
实现了简单是消息发送,既然可以传输消息,那么传输文件可以不,答案是肯定的,于是楼主就QWebSocket简单的传输文件做一个记录分享

二.实现过程
1.总体思路:
客户端发送文件名,给服务端做记录,然后再发送文本的二进制流,服务端收到文件名,做一个记录,接收到二进制流,再写入文件名保存即可

2.客户端实现,发送逻辑

void ClientWidget::on_pushButton_4_clicked()
{
    qDebug()<<"选择文件,并发送";
    QString sendFile = QFileDialog::getOpenFileName(this,QStringLiteral("选择发送文件"),"C://","TEXT(*.txt)");
    if(sendFile.isEmpty())
        return;

    // 先发送文件名,可以先裁剪剩下文件名,楼主为了方便,直接发送文件路径
    webSocket.sendTextMessage("send_file_name:"+sendFile);

    // 发送文件内容
    QFile file(sendFile);
    if(!file.open(QIODevice::ReadOnly))
        return;

    QByteArray data = file.readAll();
    webSocket.sendBinaryMessage(data);

    file.close();
}

3.服务端实现
3.1绑定两个信号槽,分别用来接收文件名以及文本二进制流

    // 单纯文本
    connect(webSocket, SIGNAL(textMessageReceived(QString)), this, SLOT(onTextMessageReived(QString)));
    
    // 二进制流
    connect(webSocket,SIGNAL(binaryMessageReceived(const QByteArray)),this,SLOT(onBinaryReived(const QByteArray)));

3.2 对应的信号槽函数

void ServerWidget::onTextMessageReived(QString msg)
{
    ui->textEdit_2->append(QDateTime::currentDateTime().toString()+":客户端发来消息:"+msg);
    // 楼主只是简单分割出了上传上来的文件名 可自己制定通讯协议
    QString flag="send_file_name";
    if(msg.contains(flag))
    {
        qDebug()<<"客户端上传的文件名:"+msg.mid(flag.length()+1);
    }
}
void ServerWidget::onBinaryReived(const QByteArray ba)
{
    qDebug()<<"onBinaryReived:"<<ba.toHex();

    QFile file("recive.txt");
    if(file.open(QIODevice::WriteOnly))
    {
        file.write(ba);
        file.close();
        qDebug()<<"服务器保存好上传的文件";
    }
    else
    {
        qDebug()<<"保存文件失败";
    }
}

三.演示截图
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值