Qt网络编程小项目-基于Tcp协议的文件传输项目

该项目描述了在Qt环境下利用TCP协议实现服务器端和客户端的数据传输,特别是客户端如何向服务器端上传文件(如音频、视频、文本)。客户端选择文件后,先发送文件名和大小信息,然后分块发送文件内容。服务器端监听连接,接收文件名和大小信息后开始接收文件,并显示接收进度。

目录

项目描述

Qt下Tcp服务器端和客户端流程:

具体流程:

客户端:

服务器端:

源码:

服务器端:

服务器头文件:

服务器源文件:

服务器端ui

客户端:

客户端头文件:

客户端源文件:

客户端ui:


项目描述

利用Tcp协议实现服务器端和客户端数据的传输,客户端向服务器端传输文件(音频、视频、文本)类似客户端上传文件

Qt下Tcp服务器端和客户端流程:

具体流程:

客户端:

头文件:

#include <QWidget>

#include <QTcpSocket>

#include <QFileDialog>//显示文件对话框

#include <QFileInfo>//获取文件信息

#include <QTimer>


  1. 客户端连接服务器

客户端只需一个接收套接字 tcpSocket = new QTcpSocket(this);

tcpSocket->connectToHost(Ip,port);连接到服务器端

开辟一个QByteArray array内存空间,通过信号与槽connect

  1. 1选择要传输的文件

QString filePath = QFileDialong::getOpenFileName(this);

QFileInfo FileData(filePath);//获取文件信息

filename = FileData.fileName();//获得文件名字

filesize = FileData.size();//获得文件大小 字节

  1.  2文件操作

QFile file创建一个文件描述符,

  1. 3文件发送

文件的发送分为两个部分:

        a.先发送一个包含文件信息的字符串类型为" filename**filesize "

QString head = filename + "**" + QString::number(filename); 
qint64 length = tcpSocket->write(head.toutf8); 
if(length>0)//发送成功 
        myTimer->start(20);//设置一个定时器 防止内容粘包 
else //发送不成功 
        file.close();

        b.防止粘包发送成功后设置一个延迟 设置一个定时器myTimer 开始发送文件本身

 myTimer = new QTimer(this); 
connect(myTimer,&QTimer::timeout, this ,[&](){ 
myTimer->stop(); 
qint64 len; 
qint64 sendSize = 0;//已经发送文件大小 
do{ char buf[4*1024] = {0};//一次读取char这么大 
len = 0; 
len = file.read(buf,sizeof(buf));//从file中读取4096放到buf中 
t
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值