程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> linux編程-往socket發送大量數據,接收方無法讀取到完整數據

linux編程-往socket發送大量數據,接收方無法讀取到完整數據

編輯:編程綜合問答
往socket發送大量數據,接收方無法讀取到完整數據

大家有沒有遇到一種情況,客戶端往服務器的socket發送了一個很大的數據(3萬+byte),在服務器那邊read socket的時候沒有讀到所有的數據,服務器用while去讀但是都無法讀到客戶端發過來的所有數據,讀取socket fd的代碼如圖
圖片說明

最佳回答:


建議你從如下角度檢查或修改代碼:

  1. 你是否使用循環send,並確定3W+字節都已經發送?
  2. TCP傳輸數據會受網絡影響,如果網絡發生擁塞,3W+字節可能不會一次性全部到達,這樣仍然可能在收完3W+字節數據前read返回EAGAIN,這種情況下,建議你在包頭加4個字節的int值來標識整個數據包的長度,然後你的收包端代碼先讀取這個長度,然後再在多次循環中將數據收齊(如返回EAGAIN,那就等待下次再接收後續數據)
Cashey1991
LLR104
Cashey1991
LLR104
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved