QTcp文件传输服务端

1,加入network模块,ui界面
服务端界面

2,头文件及私有变量,等声明
public:
explicit receiveFile(QWidget *parent = 0);
~receiveFile();
void ServerInit();

public slots:
void guanlian();
void read();
private:
Ui::receiveFile *ui;
QTcpServer *mserver;
QFile file;
QString filename;
qint64 filesize;
qint64 recesize;
3,初始化服务端
//服务器初始化
void receiveFile::ServerInit()
{
//关联客户端信号使用
connect(mserver, &QTcpServer::newConnection,
this,&receiveFile::guanlian);
//启动服务器
mserver->listen(QHostAddress::Any,8080);
}
4,guanlian()槽函数实现
void receiveFile::guanlian()
{
//创建客户端连接套接字
QTcpSocket *msocket = mserver->nextPendingConnection();

filesize = 0;
recesize = 0;

//关联客户端 读取数据 readyRead
connect(msocket, &QTcpSocket::readyRead,
this, &receiveFile::read);
}
5,read()槽函数实现
void receiveFile::read()
{
//获取客户端连接
QTcpSocket *msocket = dynamic_cast<QTcpSocket *> (sender());
//读取文件 ,读取头文件信息
if(filesize ==0)
{
//用数组保存读取到的信息
QByteArray array = msocket->readAll();

//解析数据
QDataStream stream(&array, QIODevice::ReadOnly);
stream>> filesize>> filename;
//设置进度条大小
ui->progressBar->setMaximum(filesize);
//创建新的目录
QDir d;
QString dir =“C:/Users/legend/Desktop/save”;
d.mkdir(dir);//创建目录

//拼接文件路径
QString filenames = dir+"/"+filename;
qDebug()<< filenames;

//打开文件
file.setFileName(filenames);
file.open(QIODevice::WriteOnly);
//显示进度条
this->show();
}
//读取文件内容
if(recesize<filesize)
{
//读取文件内容
QByteArray array = msocket->readAll();
file.write(array);
recesize += array.size();
//显示进度条
ui->progressBar->setValue(recesize);
}
//读取完成
if(recesize == filesize)
{
//关闭文件
file.close();
//关闭套接字连接
msocket->disconnectFromHost();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值