Re: [問題] WINSOCK send 和 recv
※ 引述《elfkiller (沒有暱稱)》之銘言:
: 若 client 欲 recv() server 的 send()
: 可是並不清楚 send 會回傳的資料量
: 如果沒有接收完 send data
: 那 server 會 bound 住直到recv 完 data 嗎? (假定 server 為 single thread)
: 又我要如何判斷是否接收資料完畢?
乾脆回一篇好了, 推文實在講不清楚
一般而言你可以用 MSG_WAITALL 來保證收取的長度
recv(sock, buf, len, MSG_WAITALL);
前提是你已經知道你要收的長度是多長
如果要看目前有多少 byte 可以收 可以用 ioctlsocket
unsigned long has;
ioctlsocket(sock, FIONREAD, &has);
你需要制定一個簡單的協定來描述是否已經把資料送完
例如:
HTTP 封包,使用 \r\n\r\n 來當作 header 傳輸完畢的區隔,後面就是 Payload
RTP 封包,前面的四個 byte header 的3/4 byte,描述了後面 Payload 的長度
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.79.63.18
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章