linux qt5.9 发布程序,QT5.9写的文件传输小程序源码

include "recive.h"

#include "ui_recive.h"

recive::recive(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::recive)

{

ui->setupUi(this);

}

recive::~recive()

{

delete ui;

}

void recive::on_pushButton_clicked()

{

socket = new QTcpSocket;

QString ip = ui->lineEdit->text();

quint16  port = ui->lineEdit_2->text().toUShort();

socket->connectToHost( QHostAddress(ip),port);

connect(socket,SIGNAL(connected()),this,SLOT(is_connected()));

connect(socket,SIGNAL(readyRead()),this,SLOT(recv_Read()));

recive_size = 0;

}

void recive::is_connected()

{

ui->textEdit->append("和服务器连接成功,请选择要保存的文件夹路径.......");

}

void recive::recv_Read()

{

//开始接收头解析

QByteArray head;

QString str_size;

head = socket->readAll();

filename = QString(head).section("##",0,0);

size =  QString(head).section("##",1,1).toULongLong();

ui->textEdit->append("文件名:"+filename+"    "+"文件大小:"+str_size.setNum(size)+"kb");

socket->write("66");

//=======打开文件=========

file.setFileName(filePath+"/"+filename);

if( false== file.open(QFile::WriteOnly))

{

ui->textEdit->append("文件打开有误....");

}

else

{

ui->textEdit->append("文件打开写成功....");

}

disconnect(socket,SIGNAL(readyRead()),this,SLOT(recv_Read()));

connect(socket,SIGNAL(readyRead()),this,SLOT(recv_Read1()));

my_timer = new QTimer;

connect(my_timer,SIGNAL(timeout()),this,SLOT(timer_hand()));

my_timer->start(1000);

}

void recive::timer_hand()

{

quint32 speed_size;

static quint64 last_size = 0,count = 0;

speed_size = recive_size-last_size;

if(speed_size == 0)

{

count++;

}

if(count>5) {  this->~recive();  }

last_size =recive_size;

QString str;

QString str1;

str1.setNum(speed_size);

if(recive_size<1024)

{

str.setNum(recive_size);

ui->lineEdit_3->setText("接受数据:"+str+"Kb"+"网速:"+str1+"KB");

return ;

}

if(recive_size/1024>0 && (recive_size/1024)<1024 )

{

str.setNum(recive_size/1024);

ui->lineEdit_3->setText("接受数据:"+str+"Mb"+"网速:"+str1+"KB");

return ;

}

if((recive_size/1024)/1024 >0  )

{

str.setNum(recive_size/1024/1024);

ui->lineEdit_3->setText("接受数据:"+str+"Gb"+"网速:"+str1+"KB");

}

}

void recive::recv_Read1() //正式接受文本内容

{

QString str;

QByteArray text = socket->readAll();

file.write(text);

recive_size++;

}

void recive::on_pushButton_2_clicked()

{

filePath = QFileDialog::getExistingDirectory(this, "choose src Directory","/");

if(filePath.isEmpty() == false )

{

ui->textEdit->append("文件路径:"+filePath);

socket->write("55");

}

else

{

ui->textEdit->append("文件选择路径有误....");

}

}

//    ====================

#include "send.h"

#include "ui_send.h"

send::send(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::send)

{

ui->setupUi(this);

ui->pushButton_2->setEnabled(false);

ui->pushButton_3->setEnabled(false);

}

send::~send()

{

delete ui;

}

void send::on_pushButton_clicked()

{

server = new QTcpServer;

QString ip = ui->lineEdit_2->text();

quint16 port = ui->lineEdit->text().toUShort();

if(true == server->listen(QHostAddress(ip),port))

{

ui->textEdit->append("此id监听成功....");

}

else

{

ui->textEdit->append("此id监听失败....");

}

connect(server,SIGNAL(newConnection()),this,SLOT(handconnect()));

}

void send::handconnect() //一个新的连接

{   static bool sever_falg = 0;

if(sever_falg == 0) //阻止其他客户端连接

{

sever_falg = 1;

ui->pushButton->setEnabled(false);

ui->pushButton_2->setEnabled(true);

ui->pushButton_3->setEnabled(true);

socket = new QTcpSocket;  //这个socket 为 读写通信socket

socket = server->nextPendingConnection();

QString ip_str1 = socket->peerAddress().toString();

QString  ip_str2 = ip_str1.section(':',3);

ui->textEdit->append ("接受端IP:"+ip_str1 );

// connect(socket,SIGNAL(readyRead()),this,SLOT(send_read()));

}

else

{

sever_falg = 1;

return ;

}

}

void send::send_read()

{

QByteArray  ackbuff;

ackbuff = socket->read(2);

if(ackbuff.toShort() == 66 )   ui->textEdit->append("文件头发送成功....");

my_timer = new QTimer;

connect(my_timer,SIGNAL(timeout()),this,SLOT(timer_hand()));

my_timer->start(1);

ui->textEdit->append("开始发送文本内容........");

// emit write_flag();

}

void send::send_text()  //空函数

{}

void send::timer_hand() //===发送文本内容

{

static quint32 count = 0;

qint64 len = 0;

char buf[1024*5];

len = file.read(buf,sizeof(buf));

socket->write(buf,len);

if(len <= 0)

{

ui->textEdit->append("文件发送成功........");

if(my_timer->isActive() == true )

{

my_timer->stop();

this->~send();

}

return ;

}

count++;

}

void send::on_pushButton_3_clicked()  //发送文件

{

QByteArray  ackbuff;

ackbuff = socket->read(2);

if(ackbuff.toShort() == 55 )

{

ui->textEdit->append("连接成功....");

ui->textEdit->append("开始发送文件头....");

QString head = QString("%1##%2").arg(filename).arg(size/1024);

socket->write(head.toUtf8());

connect(socket,SIGNAL(readyRead()),this,SLOT(send_read()));

// connect(this,SIGNAL(write_flag()),this,SLOT(send_text()));  //连接信号和曹

}

else

{

ui->textEdit->append("等待客户端连接,请再次发送....");

}

}

void send::on_pushButton_2_clicked()  //选择文件

{

QString filePath = QFileDialog::getOpenFileName(this,"open","../");

if(filePath.isEmpty() == false )

{

ui->textEdit->append("文件路径:"+filePath);

QFileInfo info(filePath);

filename = info.fileName();

size = info.size();

file.setFileName(filePath);

if( false== file.open(QIODevice::ReadOnly))

{

ui->textEdit->append("文件打开路径有误....");

}

else

{

ui->textEdit->append("文件打开成功....");

}

}

else

{

ui->textEdit->append("文件选择路径有误....");

}

}

8080a4815f46d229057e7c7ba93b362a.png

08888e3a94b1d4845f47f7539b112be4.gif

2020-7-30 11:50 上传

点击文件名下载附件

下载积分: 黑币 -5

9.68 KB, 下载次数: 6, 下载积分: 黑币 -5

08888e3a94b1d4845f47f7539b112be4.gif

2020-7-30 14:47 上传

点击文件名下载附件

下载积分: 黑币 -5

13.04 MB, 下载次数: 7, 下载积分: 黑币 -5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值