Qt檔案傳輸小記

2021-06-28 02:29:50 字數 1470 閱讀 4108

傳輸檔案時,簡單的文字檔案可以以字串的形式傳輸。一般的無格式檔案則以二進位制格式傳輸。

編寫程式涉及的buffer類有

qfile qbytearray qstring qtcpsocket 如果用其他套接字的話還會用到 char陣列。當傳輸檔案時不可避免取得資料操作,儲存資料型別轉換,寫入資料操作。

在文字方式中:

首先需要考慮字元編碼,有中文字元時,得轉為utf-8在通過套接字傳送,另一端接收到後在轉回來(qstring的toutf8()和fromutf8()操作)。

考慮傳送方式,是一行一行的讀取和傳送還是其他方式(簡單的文字檔案一般一行一行的傳輸,但是檔案稍大就傳輸慢了)。

傳送:

voids5bsendclient::sendtextmodefile(qfile&file)

; strcpy(linebuf,utf8line);

send(linebuf,len);

sendedsize+=len;

qdebug()《接收:

voids5brecvclient::recvtextfiledata()

; recv(buffer,recvlen);

inthasrecv=recvlen;

qbytearrayrecvdata=qbytearray::fromrawdata(buffer,recvlen);

qstringrecvstr=qstring::fromutf8(recvdata);

qdebug()《在二進位制方式中:

不需要考慮編碼,但是無法一行一行的傳輸,可以以塊作單位傳輸。

傳送:voids5bsendclient::senddatamodefile(qfile&file)

if(file.isopen())

sendfiledone();

}voids5bsendclient::sendmax4mdata(qbytearraymax4m)

接收:voids5brecvclient::recvdatafiledata()

; recv(buffer,recvlen);

inthasrecv=recvlen;

//把接收的資料放到檔案中

m_precvfile->write(buffer,hasrecv);

qdebug()recvsize+=hasrecv;

qdebug()《兩種方式傳輸在qt的套接字程式設計時都得考慮傳送和接收資料大小的協商。

也就是說傳送資料前添上資料的長度,後跟該資料長度大小的資料。

接收時,先接收特定位元組大小的長度值,在接收該值所表示的資料位元組數。

voids5brecvclient::recvfiledatalen()

; recv(buffer,recvlen);

if(!islittleendian())

else

qdebug()《完整的**示例

Gloox檔案傳輸小記

使用版本 1.1.10 今天弄了一下gloox中自帶的收發檔案例子,收發檔案的例子都是好使的,只不過,在除錯過程中需要注意一些問題,下面將我遇到的問題做個記錄 例子中以in band bytestreams方式收發 1 傳送檔案過程中遇到404錯誤 iq type error id uid 8509...

在QT實現檔案傳輸

過程如下 1 伺服器端設定監聽套接字,開始監聽 2 客戶端在連線成功時開始傳送檔案,有connected 訊號連線send 槽,send 傳送檔案頭資訊,包括檔名 檔案總大小和檔名大小等 3 傳送完檔案頭資訊時開始傳送檔案內容,有byteswritten qint64 訊號連線到goonsend q...

QT檔案傳輸(簡單版)

qt檔案傳輸 簡單版 這是用qt寫的一篇簡單的檔案傳輸,只是考慮了黏包問題,並沒有考慮進度條和執行緒問題 pro中加network 標頭檔案 qtcpsocket通訊套接字 qtcpserver監聽套接字 qfile 檔案操作 qtimer定時器 防止黏包 函式 fileserver 建構函式 fi...