02 Qt傳送檔案和接收

2021-08-27 08:18:05 字數 1942 閱讀 5013

首先把在客戶端加乙個用於顯示傳送進度的進度條,在伺服器端把原有的傳送和關閉換為選擇和傳送,如下圖所示

在客戶端連線伺服器之後建立套接字,伺服器便通過判斷是否有建立套接字,然後才可以選擇檔案,在connect函式內寫上

//成功連線後,才能按選擇檔案

ui->buttonfile->setenabled(true);

之後我們在serverwidget.h中定義檔案,檔名,檔案大小等變數,在serverwidget.cpp中引用,在選擇按鈕中建立槽函式。

qstring filepath=qfiledialog::getopenfilename(this,"open","../");

if(false

==filepath.isempty())

ui->buttonfile->setenabled(false);

ui->buttonsend->setenabled(true);

}else

之後便通過傳送按鈕進行傳送,在槽函式內我們要記住要定義檔案頭,防止黏包,也起到加密作用,之後再20ms後啟動定時器開始傳送

void serverwidget::on_buttonsend_clicked()

else

}

還有要特別注意傳送必須要使用定時器,要不然傳送會失敗,我們在主函式connect函式下面新增定時器,還有在serverwidget.h中要定義變數qtimer timer;

connect(&timer,&qtimer::timeout,

[=]()

);

這樣傳送檔案便完成了,緊接著我們在服務端中對傳送過來的檔案進行判斷是否接收完成,把接收完成的資訊返回給伺服器,告訴它我已經接收完成。

首先,我們定義乙個標誌位isstart,用於判斷是否可以接收,開始接收後,標誌位就置false,防止再次接收。然後我們要對接收到的資料處理,判斷檔案頭是否就是我們服務端傳送的檔案頭,是就開始接收。

if(true

==isstart)

//彈出對話方塊,顯示接收檔案的大小

qstring str=qstring("接收的檔案: [%1:%2kb]").arg(filename).arg(filesize);

qmessagebox::information(this,"檔案資訊",str);

//設定進度條

ui->progressbar->setminimum(0);

ui->progressbar->setmaximum(filesize/1024);

ui->progressbar->setvalue(0);

}

接收完後,我們在下面寫乙個else,判斷已經接收完成,給伺服器傳送資訊

else

//檔案資訊

ui->progressbar->setvalue(recvsize/1024);

if(recvsize==filesize)

}

然後在伺服器端寫上判斷是否客戶端是否接收完成

connect(tcpsocket,&qtcpsocket::readyread,

[=]()

else

{qdebug() 到這裡就基本上完成了

C 實現檔案的傳送和接收

為了把問題說清楚,把一些變數都直接附值了,並沒有通過輸入附值 private string path f artmovie.exe 要傳送的檔案 private socket s private void listen catch nullreferenceexception e e private...

C tcpClient傳送和接收

先做乙個簡單的tcpclient收發功能。先簡單做乙個介面。引入命名空間 using system.net.sockets using system.net 其中定義了三個按鈕,分別是建立連線,接收和傳送。c 中的tcp通訊實質就是socket通訊。private void button1 clic...

python tcp 傳送和接收

import socket def main 1.建立tcp的套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2.鏈結伺服器 tcp socket.connect 192.168.33.11 7890 server ip ...