IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 基于QT Tcp客户端的开发(发送文件&&数据) -> 正文阅读

[网络协议]基于QT Tcp客户端的开发(发送文件&&数据)

用QT写TCP的客户端发送文件和数据

客户端图片

QT代码

下面展示一些 客户端的代码
因为是TCP通信,要在工程文件加上netwo

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QTcpSocket>
#include<QLabel>
#include<QFile>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void senddata();

private:
    Ui::MainWindow *ui;
    QTcpSocket *tcp;
    QLabel *client_status;//client_status里面加载了图片,当与服务断coonect的时候会切换到红色的图片,disconnect的时候加载绿色的图片
    QString filename;//发送的文件名字
    quint64 filesize;//发送的文件大小
    quint64 sendsize;//发送数据的大小
      QFile *file; //创建一个文件的指针
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QHostAddress>
#include<QPixmap>
#include<QFile>
#include<QFileDialog>
#include<QMessageBox>
#include<QDebug>
#include<QTimer>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    setFixedSize(500,600);
    ui->setupUi(this);
    ui->port->setText("8899");
    ui->ip->setText("192.168.0.55");
    client_status = new QLabel(this);
    client_status->setPixmap(QPixmap(":/greene.jfif").scaled(20,20));
    ui->statusbar->addWidget(new QLabel("连接状态"));\
    ui->statusbar->addWidget(client_status);


    tcp = new QTcpSocket(this);

    connect(ui->choose_pushbutton,&QPushButton::clicked,this,[=](){
        QString path = QFileDialog::getOpenFileName(this,"打开文件"," D:\\");
        if(path.isEmpty())
        {
            QMessageBox::information(this,"提示",path+"文件路径无效");
        }
        file = new QFile(path);
        filename.clear();
        filesize = 0;
        sendsize = 0;
        QFileInfo info(path);
     filename =   info.fileName();
     filesize =    info.size();
     qDebug()<<filesize;
     bool isOk = file->open(QIODevice::ReadOnly);
       if(!isOk){
           QMessageBox::information(this, "提示","只读方式打开文件失败");
           return ;

       }
        ui->record_text->append(path);
    });

    connect(tcp,&QTcpSocket::readyRead,this,[=](){
    ui->record_text->append("服务器说"+tcp->readAll());

    });

    connect(ui->cleaar_button,&QPushButton::clicked,this,[=](){\
    ui->record_text->clear();


    });

    connect(tcp,&QTcpSocket::disconnected,this,[=](){

        tcp->close();
        tcp->deleteLater();

    });


    connect(ui->disconnect_button,&QPushButton::clicked,this,[=](){

            tcp->disconnected();
        client_status->setPixmap(QPixmap(":/greene.jfif").scaled(20,20));
           ui->statusbar->addWidget(client_status);

           ui->connect_server_button->setEnabled(true);


    });
    connect(ui->connect_server_button,&QPushButton::clicked,this,[=](){
        unsigned short port = ui->port->text().toUShort();
        QString ip = ui->ip->text();
   tcp->connectToHost(QHostAddress(ip),port);


   connect(tcp,&QTcpSocket::connected,this,[=](){


        client_status->setPixmap(QPixmap(":/red.jfif").scaled(20,20));
           ui->statusbar->addWidget(client_status);
           ui->connect_server_button->setDisabled(true);

   });
   connect(ui->send_messag_button,&QPushButton::clicked,this,[=](){

   QString mes = ui->message_text->toPlainText();
   tcp->write(mes.toUtf8());
   ui->record_text->append("客户端说"+mes);

   });

   connect(ui->send_file_button,&QPushButton::clicked,this,[=](){

   QString head = QString("%1##%2").arg(filename).arg(filesize);
   quint64 len = tcp->write(head.toUtf8());
   QTimer timer;
   if(len>0)
   {
    timer.start(20);
   }
   else if(len<=0)
   {
       QMessageBox::information(this, "提示","头部信息发送失败");
              file->close();
              return ;
   }
   if(len>0)
   {
           char buf[3000] = {0};
               len = 0;
               //往文件中读数据
               len = file->read(buf,sizeof(buf));
               //发送数据,读多少,发多少
               len = tcp->write(buf,len);
               //发送的数据要累加
               sendsize += len;
   }

   });

    });


}

MainWindow::~MainWindow()
{
    delete ui;
}

```bash

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:42:25  更:2021-08-05 17:43:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 2:12:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码