QTcp发送文件客户端

1,项目.pro加入network
2,ui设计,按钮转到槽
客户端界面
3,添加头文件,声明私有变量
private:
Ui::SendFile *ui;
QTcpSocket *msocket;
QFile file; //文件对象
QString filename; //文件名字
qint64 filesize; //文件大小
qint64 sandsize; //发送文件大小
4,文件浏览槽函数实现,发送文件槽函数实现
void SendFile::on_linkFile_clicked()
{
//通过文件路径获取文件
QString filepath = QFileDialog::getOpenFileName(this);
//显示到lineedit
ui->lineEdit->setText(filepath);
}

//发送文件
void SendFile::on_Sand_clicked()
{
//获取IP,Port
QString IP = ui->line_IP->text();
QString Port = ui->line_Port->text();
//连接
msocket->connectToHost(IP, Port.toUShort());
qDebug() <<“connect success”;
//初始化文件大小
filesize = 0;
sandsize = 0;
}

5,构造函数给socket分配空间
msocket = new QTcpSocket(this);
//连接成功,需要将文件的头信息发送给服务器
connect(msocket, &QTcpSocket::connected,
this,SendFile::lianjie);
//当头信息发送成功,产生信号byteWritten
connect(msocket, &QTcpSocket::bytesWritten,
this, SendFile::fasong);
6,lianjie(),fasong()槽函数实现
void SendFile::lianjie()
{
//准备获取文件大小和名称
QFileInfo info(ui->lineEdit->text());
filename = info.fileName();
filesize = info.size();
qDebug()<< filename<< " "<<filesize;
//使用数组绑定文件大小和文件名
QByteArray array;
QDataStream stream(&array, QIODevice::WriteOnly);
stream<< filesize<< filename;

//设置进度条的最大值
ui->progressBar->setMaximum(filesize);

//打开文件准备读写数据
file.setFileName(ui->lineEdit->text());
file.open(QIODevice::ReadOnly);

//发送数据
msocket->write(array);

}
void SendFile::fasong()
{
//发送数据
if(sandsize<filesize)
{
//读取一段数据
QByteArray array = file.read(1024*10);
//发送数据
msocket->write(array);
//发送大小累计
sandsize += array.size();
//更新进度条显示
ui->progressBar->setValue(sandsize);
}
//发送完成
if(sandsize == filesize)
{
//关闭文件
file.close();
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值