共用方式為


CAsyncSocket::Receive

呼叫此成員函式接收通訊端的資料。

virtual int Receive(
   void* lpBuf,
   int nBufLen,
   int nFlags = 0 
);

參數

  • lpBuf
    輸入資料的緩衝區。

  • nBufLen
    lpBuf 的長度 (以位元組為單位)。

  • nFlags
    指定呼叫的方法。 通訊端選項和 nFlags 參數取決於函式語意。 後者可透過合併下列其中一個值來建構的 C++ OR 運算子:

    • 在輸入資料的MSG_PEEK 窺視。 資料複製到緩衝區,但從輸入佇列不會移除。

    • MSG_OOB 處理 Out-of-Band 資料。

傳回值

如果未發生任何錯誤, 接收 傳回所接收的位元組數目。 如果關閉連接,它會傳回 0。 否則, SOCKET_ERROR 的值,都會傳回,而特定錯誤碼來呼叫 GetLastError擷取。 下列錯誤套用至這個成員函式:

  • WSANOTINITIALISED A 成功 AfxSocketInit 必須在使用此 API 之前發生。

  • WSAENETDOWN 視窗通訊端實作偵測網路子系統失敗。

  • WSAENOTCONN 通訊端未連接。

  • 封鎖視窗通訊端作業的WSAEINPROGRESS A 正在進行中。

  • WSAENOTSOCK 描述元不是通訊端。

  • WSAEOPNOTSUPP   MSG_OOB 已指定,但不是,通訊端類型 SOCK_STREAM

  • WSAESHUTDOWN 通訊端已經關閉,,在 ShutDown 叫用 nHow 設為 0 或 2. 之後,呼叫在通訊端上 接收 是不可能的。

  • WSAEWOULDBLOCK 通訊端標記為未封鎖,並且 接收 作業將會封鎖。

  • WSAEMSGSIZE 資料包太大而無法符合指定的緩衝區和已截斷。

  • WSAEINVAL 通訊端未繫結的 繫結

  • WSAECONNABORTED 虛擬通道中止的緣故暫止或任何其他失敗。

  • WSAECONNRESET 虛擬通道由遠端重設。

備註

這個函式會連接至資料流或資料包通訊端使用和來讀取輸入資料。

對於型別 SOCK_STREAM通訊端,相同的資訊與目前可用的所提供的緩衝區的大小決定傳回。 如果通訊端為 Out-of-Band Data 處置 (通訊端選項 SO_OOBINLINE) 的內嵌工作,很有趣且 Out-of-Band Data 是未讀取,,只有 Out-of-Band 資料將會傳回。 應用程式可以使用 IOCtlSIOCATMARK 選取或 OnOutOfBandData 判斷 Out-of-Band 資料是否仍要讀取。

對於資料包通訊端,資料會從第一個加入佇列的資料包,擷取所提供的緩衝區決定的大小。 如果資料包大於所提供的緩衝區,緩衝區會填入資料包的第一個部分,超過的資料將遺失和 接收 傳回 SOCKET_ERROR 的值所設定的錯誤碼的加入至 WSAEMSGSIZE。 如果傳入的資料不可在通訊端, SOCKET_ERROR 的值傳回錯誤碼設定為 WSAEWOULDBLOCKOnReceive 回呼函式可用於判斷詳細資料何時到達。

如果通訊端是型別,並 SOCK_STREAM 遠端順利地關閉連接, 接收 將會立即完成具有 0 接收的位元組。 如果連接重設, 接收 因錯誤 WSAECONNRESET

CAsyncSocket::OnReceive ,每次呼叫,應該只呼叫一次接收

範例

CAsyncSocket::OnReceive。請參閱範例。

需求

Header: afxsock.h

請參閱

參考

CAsyncSocket 類別

階層架構圖

CAsyncSocket::AsyncSelect

CAsyncSocket::Create

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send