Qt网络编程:QWebSocket发送文件

接上几篇关于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<QWebSocket *>(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<QWebSocket *>(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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的图形用户界面(GUI)开发工具集,可以用来开发各种应用程序,包括音视频播放器。 QMediaPlayer是Qt中的一个多媒体播放类,可以用来播放音频和视频文件。基于QMediaPlayer,我们可以开发一个功能完善的音视频播放器。 首先,我们可以使用QMediaPlayer提供的功能来实现基本的音视频播放控制,包括播放、暂停、停止、快进、快退等。我们可以通过按钮、菜单或者快捷键来触发相应的操作,或者可以根据用户的输入来实现自动播放和暂停。 其次,我们可以通过QMediaPlayer的信号和槽机制来实现一些附加功能。例如,当播放器播放完一个文件时,我们可以发出一个信号来通知用户,或者自动切换到下一个文件。我们还可以监听播放器的状态变化,例如播放、暂停、停止等,以便更新界面和提供相应的反馈信息。 此外,我们还可以使用QMediaPlayer的媒体查询功能来获取音视频文件的元数据,例如时长、作者、标题等信息,以及获取当前播放位置和进度。我们可以将这些信息显示在界面上,让用户获得更好的使用体验。 除了以上功能,我们还可以使用Qt提供的其他模块来增加更多的特性。例如,我们可以使用Qt Multimedia模块的QAudioProbe来实现音频波形显示,使用Qt MultimediaWidgets模块的QVideoWidget来实现视频播放区域,使用Qt Widgets模块的QSlider来实现音视频进度条等。 总之,基于QMediaPlayer的开发,我们可以轻松实现一个功能完善的音视频播放器,满足用户对于音视频播放的基本需求,并且具备一定的扩展性,可以根据实际需求进行功能扩展和自定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值