亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用socket接收http的數據, 如何判斷數據的結束

用socket接收http的數據, 如何判斷數據的結束

牛魔王的故事 2019-04-19 16:10:54
用同步socket(語言隨意)來請求數據,建立請求之后sendHTTPRequest頭,然后就可以recv服務器的Response了.但是數據的結束應該怎樣判斷呢?(緩沖區大小是4096)判斷接收的數據與緩沖區大小對比,如果小于說明數據已經結束:如果最后一個包的大小恰好是4096,這樣我認為數據還沒結束,然后繼續recv,就會阻塞.用非阻塞socket,如果在接收過程中有空數據,則說明數據已經結束:數據中間可能會有延遲,如果這時出現不連續,會誤認為數據已經結束.HTTP相應頭的信息:不是所有的響應都包含Content-Length所以正確的httpclient實現這方面的是怎樣的.------UPDATE@2015/3/14------后來在StackOverflow找到了相應問題的回答,在此貼下鏈接http://stackoverflow.com/questions/4824451/detect-end-of-http-request-body.同時也感謝@xelz的耐心回答,采納為答案.
查看完整描述

2 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

沒有Content-Length只有兩種情況,否則就不是一個標準的httpserver
傳輸完畢就關閉connection
HTTP1.1沒有Content-Length,但是Transfer-Encoding:chunked,最后一個chunk的length==0
                            
查看完整回答
反對 回復 2019-04-19
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

可以仿造一下websocket的頭。
每個數據包開頭可以弄一個字節的fin來判斷這個包是不是最后一個數據包。
如果是確認關閉連接,可不可以傳一個累計發包數目供客戶端對比一下還有沒有沒有成功接受的數據。
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 315 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號