码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt 在粘包的情况下实现上传图片与消息发送


    Qt 在粘包的情况下实现上传图片与消息发送


    近期在写一个通讯软件,作为 Qt 的项目练手。因为考虑用户头像更换问题,所以就需要用户把用户头像上传到服务器,这样该用户的好友就能通过 HTTP 请求(可看博客:Qt 访问服务器上的图片),在自己的客户端看到更新后的头像。

    理论上,先由客户端发送一个更换头像的请求,然后再将选好的图片上传到服务器,上传结束后客户端再发送一个图片传输结束请求,这样一整个更换头像的流程就结束了。但是,实际上,我们需要考虑的东西和遇到的问题会比理论上的多且复杂,例如,由于图片的大小不确定,就可能上传的图片大小为 几十mb ,TcpSocket 一次发送不了这么多的数据,所以需要多次发送,但是,服务端的一次接收只能读 1966(qtcreator 5.9) 大小的字节,所以服务端也需要多次接收,才能将一个图片文件完整的保持下来。最为关键的是,客户端发送出来的数据存在粘包,以至于,读出来的数据不能判断是上传的图片数据,还是混合着图片数据和消息数据的数据。

    前置知识:缓冲区概念、QTcpSocket::read(qint64 MaxSize)、QTcpSocket::bytesWritten、QTcpSocket::write()

    之前就有遇到过粘包问题,但是网络和群友给出的解决方案数模拟数据包的形式发送(可看博客:Qt 发送端一次发送多条数据,但接收端只接收一次总的数据),总感觉没有解决根本问题,因为模仿数据包的形式发送依旧是存在粘包问题,那我又怎么知道数据包的头部在什么位置,数据包头部的大小,我当前所读的数据是否又包含了好几个数据包。(此处可用 QDataStream 将数据大小写入 QByteArray 可以解决数据包头部大小问题,具体实现应该会在下一篇文章中写)

    处理思路:

    1. 构建图片上传请求,在请求中需要注明图片的大小和发送者,发送传输请求,让服务端准备好接收图片。
  • 相关阅读:
    『 基础算法题解 』之双指针(上)
    深入理解线程安全
    Linux —— 定时任务(sleep、crontab、at)
    JAVAWeb2:整体框架
    机器学习评估指标(Metrics)
    Java多商户新零售超市外卖商品系统
    美国NSC大规模数据泄露,涉及壳牌、戴尔、特斯拉等2000多家公司
    基于JavaSwing开发MP3音乐播放器 课程设计 大作业源码 毕业设计
    内卷失败:敲了 10000 小时代码,我也没能成为一名高级程序员
    图文版实现无头非循环单链表的增加和删除操作
  • 原文地址:https://blog.csdn.net/weixin_46870692/article/details/127738136
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号