天天看點

Qt中tcp傳輸檔案遇到的問題

我在用tcp傳檔案的過程中,遇到了“掉幀”的情況,即收到的檔案大小要比實際檔案大小小,使得檔案被破壞。我用的方法是先把檔案的大小、名稱等打包成檔案頭先傳輸過來,然後再傳檔案的本體。用戶端進行接收的時候,先接受檔案頭,然後建立空檔案,再接收後續的資料,寫入空檔案中。經過調試,發現,我在socket裡面寫了檔案頭以後,用戶端的socket并沒有馬上讀取檔案頭,而是等到了socket資料達到一定量的時候,才讀取的。是以,我第一次接收到的檔案并不僅僅是檔案頭,而是檔案頭+部分檔案資料。而我處理的時候隻處理了檔案頭,而将那部分附加的資料忽略掉了,導緻檔案不完整。