複製鏈接
請複製以下鏈接發送給好友

CAsyncSocket::Receive

鎖定
對於數據報套接字,本函數從第一個入隊的數據報中解出數據,發到緩衝中。如果數據報比緩衝大,則緩衝中僅包含數據報的前一部分,而丟棄其它的數據,Receive返回SOCKET_ERROR,錯誤代碼設成WSAEMSGSIZE。
中文名
CAsyncSocket::Receive
類    別
函數
用    途
套接字獲取數據
參    數
lpBuf

目錄

CAsyncSocket::Receive簡介

函數功能描述:本函數用於從套接字獲取數據
CAsyncSocket::Receive
virtual int Receive(void* lpBuf,int nBufLen, int nFlags = 0 );
返回值
調用成功時,返回接收到的字節數。如果連接被關閉了,返回0;否則返回SOCKET_ERROR,可以調用GetLastError得到特定的錯誤代碼。此成員函數可用的錯誤代碼有:
1 WSANOTINITIALISED 調用本API函數之前必須成功執行了AfxsocketInit函數。
2 WSAENETDOWN Windows Sockets檢測到網絡系統故障。
3 WSAENOTCONN 套接字沒有連接上。
4 WSAEINPROGRESS 正在進行成塊的Windows Sockets操作。
5 WSAENOTSOCK 描述符不是一個套接字
6 WSAEOPNOTSUPP 設置了MSG_OOB,但是套接字的類型不是SOCK_ STREAM。
7 WSAESHUTDOWN 套接字已經被關閉。調用ShutDown(參數nHow的值設為0或2)後,就不能在該套接字上調用Receive了。
8 WSAEWOULDBLOCK 套接字標誌為非成塊,而Receive操作將產生成塊。
9 WSAEMSGSIZE 數據報太大,不能完全放到緩衝中,將被截斷。
10 WSAEINVAL 套接字沒有用Bind綁定。
11 WSAECONNABORTED 由於超時或其它故障使虛電路異常退出。
12 WSAECONNRESET 遠端重置了虛電路。
輸入數據的緩衝。
nBufLen
lpBuf的大小(字節數)。
nFlags
設置調用模式。本函數的語義由套接字選項和nFlags參數共同決定。nFlags由下面的任一個值組成,也可以用C++的OR操作符組合使用:
1 MSG_PEEK 把數據拷貝到緩衝,但不從輸入隊列上移走。
2 MSG_OOB 處理帶外數據(請參閲聯機文檔“Win32 SDK”中的“Windows套接字編程注意事項")

CAsyncSocket::Receive説明

本函數用於從套接字獲取數據。它從已連接的流套接字或數據報套接字上讀輸入的數據。
對於流套接字(SOCK_STREAM類型的套接字),本函數返回緩衝中不超過緩衝大小的所有有效數據。如果套接字被設置成在線接收帶外數據(套接字選項為SO_OOBINLINE),並且帶外數據沒有被讀,則僅僅返回帶外數據。應用可以使用IOCtl的SIOCATMARK選項或者OnOutOfBandData來檢測是否還有未讀的帶外數據
如果套接字中沒有輸入數據,則返回SOCKET_ERROR,並把錯誤代碼設為WSAEWOULD-BLOCK。當更多的數據到達時,可用回調函數OnReceive來檢測。如果套接字是SOCK_STREAM類型的,並且遠端接點已經正常地關閉連接,Receive會立即返回,接收的數據當然是0字節。如果連接被重置了,Receive將會異常返回,錯誤代碼為WSAECONNRESET。
示例
參照CAsyncSocket::OnReceive.
請參閲
CAsyncSocket::AsyncSelect, CAsyncSocket::Create,CAsyncSocket::ReceiveFrom, CAsyncSocket::Send