QTcpSocket客户端和服务端发送图片(或大文件)小Demo
先看一下效果:
思路:
发图片、大文件与发短字符不大一样。
1、文件和图片通过TCP可能一次发不过去,可能要发很多次。所以我们在发送文件、数据、以及文字最好带上文件的大小。
2、图片转换成文件流的形式,这个Demo是转成base64加密流
核心代码:
1、tcp客户端与服务端的代码这里就不贴了,以前贴过,可以看我以前的帖子。这里贴一下思路代码:
发送图片端:
QByteArray byte = "P" + QByteArray::number(m_base64.length()) + "P";m_tcpClient->sendMessageB(byte);qDebug() << "len" << byte;m_tcpClient->sendMessageB(m_base64);
这里的“P”只是一个分隔符,可以自定义。m_base64是图片转换成的QByteArray。
看一下接收图片端:
QByteArray tmp = m_socket->readAll();if(m_dataLength != 0) {m_byte.append(tmp);m_dataLength = m_dataLength - tmp.length();qDebug() << "m_dataLength " << m_dataLength;if(m_dataLength == 0) {emit alreadyRead();}} else {int len;if(tmp.contains("P")) {m_type = "P";len = tmp.split('P').at(1).toInt();} else if(tmp.contains("T")){m_type = "T";len = tmp.split('T').at(1).toInt();}int preNum = 2 + QString::number(len).count();m_dataLength = len + preNum - tmp.length();m_byte.clear();m_byte = tmp.mid(preNum, tmp.count() - preNum);}
2、图片转换成文字流的代码:
#ifndef SBASE64TOIMAGE_H
#define SBASE64TOIMAGE_H#include <QByteArray>
#include <QBuffer>
#include <QImage>
#include <QPixmap>class SBase64ToImage : public QObject
{Q_OBJECT
public:static QByteArray Image_To_Base64(QString ImgPath) {QImage image(ImgPath);QByteArray ba;QBuffer buf(&ba);image.save(&buf,"PNG",20);QByteArray hexed = ba.toBase64();buf.close();return hexed;}static QPixmap Base64_To_Image(QByteArray bytearray) {QByteArray Ret_bytearray = QByteArray::fromBase64(bytearray);QBuffer buffer(&Ret_bytearray);buffer.open(QIODevice::WriteOnly);QPixmap imageresult;imageresult.loadFromData(Ret_bytearray);return imageresult;}
};
#endif // SBASE64TOIMAGE_H
QTcpSocket客户端和服务端发送图片(或大文件)小Demo相关推荐
- java服务器向客户端发消息_java一个简单的客户端向服务端发送消息
java一个简单的客户端向服务端发送消息 客户端代码: package com.chenghu.tcpip; import java.io.IOException; import java.io.Ou ...
- python中使用socket编程实现带有界面的客户端向服务端发送文件和下载文件
一主界面: **二:发送文件界面:**首先需要开启发送文件服务端(这里需要注意的是每一次发送文件之前都需要开启一次服务端,因为我在这里将每一次发送文件之后就关闭了客户端和服务端之间的连接) 输出相关客 ...
- java网络编程Socket实现客户端向服务端发送信息
(可按目录按需阅读,我一般会整理的比较细) 前置知识 java IO Socket 什么是socket?socket字面意思其实就是一个插口或者套接字,包含了源ip地址.源端口.目的ip地址和源端口. ...
- Golang使用协程通过Socket实现客户端向服务端发送数据,服务端接收数据
一.服务端代码: package mainimport("fmt""net" )func process(conn net.Conn) {//延迟关闭目前连接d ...
- flask和socket结合使用实现客户端向服务端发送文件
文章目录 1.实验效果 2.文件结构说明 3.操作步骤 4.代码下载 5.服务端文件 6.客户端文件 7.前端文件 1.实验效果 成功发送文件和接收文件 2.文件结构说明 3.操作步骤 (1)首先运行 ...
- 使用struts2框架中3种客户端向服务端发送请求参数的方式
1.action属性: 前端参数直接在action属性名之后,如PersonAction?id=1; 在对应的action中加入属性id,必须加对应属性的get(),set()方法,其中属性名应为小写 ...
- Android 客户端与服务端的数据交互问题
Android客户端是如何与服务端的数据进行交互的呢? 一般就是客户端向服务端发送请求,服务端对数据进行相关处理,返回json数据返回给客户端,客户端再进行相关操作. 说明:主要是用登录功能来进行详解 ...
- java 网络编程(二) tcp传输实现客户端和服务端进行信息交流
1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...
- python 安卓应用层_使用Python开发客户端和服务端程序 理解应用层协议和表示层...
不少学习计算机网的学生,对于服务器和客户机,以及应用层协议 表示层理解的不完全,在这里我使用Python编写了用于传输学生信息的程序.服务端使用TCP的8898端口侦听客户端的请求.客户端向服务端发送 ...
最新文章
- centos得mysql安装教程_Centos下Mysql安装图文教程_MySQL
- 我的MVP,来的那么“糊涂”(2009.4)
- 安卓机更新系统会卡吗_【ios13更新】最全的ios13系统的攻略,最大一次更新,升级绝对不会后悔吗?来看看...
- python中类变量的访问方式_在Python中,如何访问类方法中的“静态”类变量
- 【动态规划】【多重背包】[HDU 1291]悼念512汶川大地震遇难同胞――珍惜现在,感恩生活...
- 德佑地产房产经纪人区域总监访谈:掌门的态度
- 11.18 如何将界面注册到系统?
- Python 数据结构与算法——引用计数
- python greenlet背景介绍与实现机制
- 感染暴风一号u盘病毒的解决办法
- python 单因子方差分析_假设检验之F检验-方差分析
- Android【语音合成TTS】
- hexo入门学习(四):文章(带图片)
- Linux 系统不能正常关机解决办法
- linux制作 引导盘,制作Linux引导盘的四种方法
- js 绘画js 绘画路径_绘画是一种技能,而不是才能
- java制作纯字rpg小游戏_初学JAVA时编写的rpg文字游戏
- 发送QQ邮件报证书不被信任 Error in certificate
- 软件工程:编码和测试
- 把MySQL语句转换为sqlserver_mysql语句转换为sql server语句