记录项目中实现QT客户端发送图片,Linux服务器接收图片并保存本地的功能代码。
如果没有要求,可一次性把图片数据发送,不用分成多个包进行传输。
文章目录
包的设计
typedef struct insert {
int packet_seq; //包序号
int packet_sum; //包总数
char trans_id[32]; //包流水32
}INSERT_T;
typedef struct service //业务层数据
{
int funcid; //功能号
char contex[900]; //业务数据
}SERVICE_T;
typedef struct bag {
//总包类型
char bag_head[2]; //包头 4字节
int fd; //fd 4字节
INSERT_T insert_; //接入层数据 40字节
SERVICE_T service_; //业务层数据 904字节
int error_code; //错误代码 4字节
char error_msg[32]; //错误信息 32字节
char bag_md5[32]; //校验码 32字节
char bag_tail[2]; //包尾 4字节
}BAG_T;
typedef struct req_picture
{
char picture_id[32]; //图片id(名字)
char user_id[16]; //用户id
char video_id[32]; //视频id(名字)
char picture_time[32]; //拍摄时间
char picture_locale[32]; //拍摄地点
int status; //自动拍照:0,手动拍照:1
int len; //图片大小
unsigned char picture[700]; //存放视频
}REQ_PICTURE_T;
QT客户端主要代码
简单的说就是转换成dataArray的数据格式,根据实际包实际能存放的大小,每次发送固定长度的图片数据给服务器。注意最后一个包的处理。
void picture::on_pushButton_2_clicked()
{
//设置图片id
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyyMMddhhmmss")</