int ReceiveFrom ( void ※ lpBuf, int nBufLen, CStringamp; rSocketAddress, UINT & rSocketPort, int nFlags = 0 );(&A)
int ReceiveFrom ( void ※ lpBuf, int nBufLen, SOCKADDR ※ lpSockAddr, int ※ lpSockAddrLen, int nFlags = 0 );
戻り値
エラーが発生しない場合、 ReceiveFromは受信したバイト数を返します。接続が閉じられている場合は、0 を返します。それ以外の場合、値がSOCKET_ERRORを返し、 GetLastErrorを呼び出して、特定のエラー コードを取得することができます。このメンバー関数を次のエラーを適用します。:
パラメーター
lpBuf
着信データ用のバッファー。
nBufLen
LpBuf (バイト単位) の長さ。
rSocketAddress
点線の番号 IP アドレスを受け取るCStringオブジェクトへの参照。
rSocketPort
ポートを格納するUINTへの参照。
lpSockAddr
返却時にソース アドレスを保持を格納している SOCKADDR構造体へのポインター。
lpSockAddrLen
LpSockAddrバイトのソース アドレスの長さへのポインター。
nFlags
呼び出しが行われる方法を指定します。この関数の意味は、ソケット オプションとパラメーター nFlagsによって決まります。後者は C++または演算子を使って次の値のいずれかを組み合わせることで構築します。:
解説
データグラムを受信し、 SOCKADDR構造体またはrSocketAddressのソース アドレスを格納するにはこのメンバー関数を呼び出します。この関数を使用して、(おそらく) ソケットで受信データを読み取るし、データを送信するために使用したアドレスを取得するには。
SOCK_STREAMタイプのソケットの場合、できるだけ多くの情報は、指定されたバッファーのサイズまで使用可能なが返されます。ソケット帯域外のデータ (ソケット オプションSO_OOBINLINE) の行で受信の構成されているし、帯域外のデータは読み取りではない場合は、帯域外のデータのみが返されます。アプリケーションは、 IOCtlSIOCATMARKオプションまたはOnOutOfBandDataがより帯域外のデータを読み取ることが残っているかどうかを判断する際にできます。LpSockAddrおよびlpSockAddrLenパラメーター SOCK_STREAMのソケットの場合は無視されます。 。
データグラム ソケットでは、指定されたバッファーのサイズまで、最初のキューに格納されたデータグラムからデータが抽出されます。データグラムが指定されたバッファーよりも大きい場合は、メッセージの最初の部分でバッファーがいっぱいです、超過データは失われます、 ReceiveFrom値がSOCKET_ERROR WSAEMSGSIZEに、エラー コードを返します。
LpSockAddrが 0 以外の値、型SOCK_DGRAMのソケットである場合は、データを送信、ソケットのネットワーク アドレスに対応するSOCKADDR構造体にコピーされます。LpSockAddrLenが指す値はこの構造体のサイズに初期化され、roi が格納されているアドレスの実際のサイズを示すために変更されます。ソケットに利用できる受信データがない場合は、 ReceiveFromの呼び出しをソケットにデータを待機するブロック。この例では、値がSOCKET_ERROR WSAEWOULDBLOCKを設定、エラー コードが返されます。OnReceiveコールバックを使用してより多くのデータが到着したときを確認できます。
ソケットSOCK_STREAMタイプのリモート側が接続を正常にシャット ダウンしている場合、 ReceiveFromすぐに 0 バイト受信を完了します。
CAsyncSocket 概要|nbsp;クラス メンバー |階層図(&N)
参照特価;CAsyncSocket::AsyncSelect、 CAsyncSocket::Create、 CAsyncSocket::Receive、 :send(&N)