QT Tcp传输文件客户端

 #pragma once

#include <QWidget>
#include "ui_QtClient.h"
#include <QTcpSocket>
#include <QFile>

class QtClient : public QWidget
{
	Q_OBJECT

public:
	QtClient(QWidget *parent = Q_NULLPTR);
	~QtClient();

private:
	Ui::QtClient ui;

	QTcpSocket *ptcpSocket;
	QFile file;
	QString fileName;
	qint64 fileSize;
	qint64 recvSize;

	bool isStart;
};
#include "QtClient.h"
#include <QMessageBox>

QtClient::QtClient(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	setWindowTitle(QString::fromLocal8Bit("客户端"));

	ui.progressBar->setValue(0);

	ptcpSocket = new QTcpSocket(this);
	isStart = true;

	connect(ptcpSocket, &QTcpSocket::readyRead, [=]() {
		//取出接收的内容
		QByteArray buf = ptcpSocket->readAll();
		if (isStart)
		{
			isStart = false;
			//解析头部信息  初始化  打开文件
			fileName = QString(buf).section("##", 0, 0);
			fileSize = QString(buf).section("##", 1, 1).toInt();
			recvSize = 0;

			ui.progressBar->setMinimum(0);
			ui.progressBar->setMaximum(fileSize / 1024);

			//打开文件
			file.setFileName(fileName);
			file.open(QIODevice::WriteOnly);
		}
		else
		{
			qint64 len = file.write(buf);
			recvSize += len;

			ui.progressBar->setValue(recvSize / 1024);		//除以1024 是防止文件太大导致 int 数据类型越界

			if (recvSize == fileSize)
			{
				QMessageBox::information(this, QString::fromLocal8Bit("完成"), QString::fromLocal8Bit("文件接收完成"));

				file.close();	//关闭文件

				ptcpSocket->disconnectFromHost();
				ptcpSocket->close();
			}
		}
	});

	connect(ui.button_Connect, &QPushButton::clicked, [=]() {
		QString IP = ui.lineEdit_IP->text();
		quint16 port = ui.lineEdit_Port->text().toInt();
		ptcpSocket->connectToHost(IP, port);
	});
}

QtClient::~QtClient()
{
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值