打印

QT5.9写的文件传输小程序源码

[复制链接]
144|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
石头张|  楼主 | 2018-10-6 08:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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("文件选择路径有误....");

         }



}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

446

帖子

0

粉丝