當前位置:編程學習大全網 - 編程軟體 - C++,socket編程,服務器接收的數據不完整,中間混了十六進制的CDCDCDCD光盤。出什麽事了?

C++,socket編程,服務器接收的數據不完整,中間混了十六進制的CDCDCDCD光盤。出什麽事了?

第壹個問題,有0xcdcdcdcd是因為緩沖區的4000字節沒有初始化。比如只分配緩沖區的前三個字節,後面的字節不忽略,最後壹個字節是未初始化的字節,也就是0xcd。

第二個問題是理解recv函數的工作流程。它有數據要讀取。雖然妳設置了4000的大小,但如果當時只收到3600字節,也會返回,所以readLen是3600,不是4000。而後壹句p = p+4000;也應該改成p = p+readLen;

為了獲得想要的效果,您應該將服務器更改為

char * p =(char *)raw data buffer;//rawDataBuffer是無符號的int類型。

int n = 0;

while(n & lt;16 * 4000)

{

readLen += recv(sockConn,p,4000,0);

p = p+readLen;

}

close socket(sock conn);

只有這樣才能收到完整的數據。

  • 上一篇:計算機技術在職研究生專業研究方向有哪些
  • 下一篇:打印機獲取圖像的處理步驟?
  • copyright 2024編程學習大全網