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();
}
}