Socket.EndReceive メソッド (IAsyncResult, SocketError)
アセンブリ: System (system.dll 内)

Public Function EndReceive ( _ asyncResult As IAsyncResult, _ <OutAttribute> ByRef errorCode As SocketError _ ) As Integer
Dim instance As Socket Dim asyncResult As IAsyncResult Dim errorCode As SocketError Dim returnValue As Integer returnValue = instance.EndReceive(asyncResult, errorCode)
public int EndReceive ( IAsyncResult asyncResult, /** @attribute OutAttribute() */ /** @ref */ SocketError errorCode )
戻り値
受信したバイト数。


EndReceive メソッドは、BeginReceive メソッドで開始された非同期の読み取り操作を完了します。
BeginReceive を呼び出す前に、AsyncCallback デリゲートを実装するコールバック メソッドを作成する必要があります。このコールバック メソッドは個別のスレッドで実行され、BeginReceive の終了時に呼び出されます。コールバック メソッドは、BeginReceive メソッドからパラメータとして返された IAsyncResult を受け取る必要があります。
コールバック メソッド内では、IAsyncResult の AsyncState メソッドを呼び出して、BeginReceive に渡された状態オブジェクトを取得します。この状態オブジェクトから受信した Socket を抽出してください。Socket を取得したら、EndReceive メソッドを呼び出して読み取り操作を正常に完了し、読み取られたバイト数を返すことができます。
EndReceive メソッドは、データが使用可能になるまでブロックします。コネクションレスのプロトコルを使用している場合、EndReceive は、受信ネットワーク バッファ内で使用できる、最初にキューに格納されたデータグラムを読み取ります。コネクション指向のプロトコルを使用している場合、EndReceive メソッドは、BeginReceive メソッドの size パラメータで指定したバイト数までの、使用可能なデータをすべて読み取ります。リモート ホストが Shutdown メソッドで Socket 接続をシャットダウンし、使用できるデータがすべて受信されると、EndReceive メソッドはすぐに完了して、0 バイトを返します。
受信したデータを取得するには、IAsyncResult の AsyncState メソッドを呼び出して、結果として得られる状態オブジェクト内のバッファを抽出します。
![]() |
---|
SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。 |

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Socket.EndReceive メソッド

名前 | 説明 |
---|---|
Socket.EndReceive (IAsyncResult) | 保留中の非同期読み込みを終了します。 .NET Compact Framework によってサポートされています。 |
Socket.EndReceive (IAsyncResult, SocketError) | 保留中の非同期読み込みを終了します。 |

Socket.EndReceive メソッド (IAsyncResult)
アセンブリ: System (system.dll 内)

Dim instance As Socket Dim asyncResult As IAsyncResult Dim returnValue As Integer returnValue = instance.EndReceive(asyncResult)
戻り値
受信したバイト数。


EndReceive メソッドは、BeginReceive メソッドで開始された非同期の読み取り操作を完了します。
BeginReceive を呼び出す前に、AsyncCallback デリゲートを実装するコールバック メソッドを作成する必要があります。このコールバック メソッドは個別のスレッドで実行され、BeginReceive の終了時に呼び出されます。コールバック メソッドは、BeginReceive メソッドからパラメータとして返された IAsyncResult を受け取る必要があります。
コールバック メソッド内では、IAsyncResult の AsyncState メソッドを呼び出して、BeginReceive に渡された状態オブジェクトを取得します。この状態オブジェクトから受信した Socket を抽出してください。Socket を取得したら、EndReceive メソッドを呼び出して読み取り操作を正常に完了し、読み取られたバイト数を返すことができます。
EndReceive メソッドは、データが使用可能になるまでブロックします。コネクションレスのプロトコルを使用している場合、EndReceive は、受信ネットワーク バッファ内で使用できる、最初にキューに格納されたデータグラムを読み取ります。コネクション指向のプロトコルを使用している場合、EndReceive メソッドは、BeginReceive メソッドの size パラメータで指定したバイト数までの、使用可能なデータをすべて読み取ります。リモート ホストが Shutdown メソッドで Socket 接続をシャットダウンし、使用できるデータがすべて受信されると、EndReceive メソッドはすぐに完了して、0 バイトを返します。
受信したデータを取得するには、IAsyncResult の AsyncState メソッドを呼び出して、結果として得られる状態オブジェクト内のバッファを抽出します。
保留中の BeginReceive をキャンセルするには、Close メソッドを呼び出します。
![]() |
---|
SocketException が発生した場合は、SocketException.ErrorCode プロパティを使用して具体的なエラー コードを取得してください。このコードを取得したら、Windows Socket Version 2 API エラー コードのドキュメントでエラーの詳細情報を確認してください。これは MSDN ライブラリから入手できます。 |

保留中の非同期読み込みを終了するコード例を次に示します。ソケットを使用した非同期通信を示すコード例の全体については、「ソケットのコード例」を参照してください。
Public Shared Sub Read_Callback(ar As IAsyncResult) Dim so As StateObject = CType(ar.AsyncState, StateObject) Dim s As Socket = so.workSocket Dim read As Integer = s.EndReceive(ar) If read > 0 Then so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read)) s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0, New AsyncCallback(AddressOf Async_Send_Receive.Read_Callback), so) Else If so.sb.Length > 1 Then 'All the data has been read, so displays it to the console Dim strContent As String strContent = so.sb.ToString() Console.WriteLine([String].Format("Read {0} byte from socket" + "data = {1} ", strContent.Length, strContent)) End If s.Close() End If End Sub 'Read_Callback
public static void Read_Callback(IAsyncResult ar){ StateObject so = (StateObject) ar.AsyncState; Socket s = so.workSocket; int read = s.EndReceive(ar); if (read > 0) { so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read)); s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0, new AsyncCallback(Async_Send_Receive.Read_Callback), so); } else{ if (so.sb.Length > 1) { //All of the data has been read, so displays it to the console string strContent; strContent = so.sb.ToString(); Console.WriteLine(String.Format("Read {0} byte from socket" + "data = {1} ", strContent.Length, strContent)); } s.Close(); } }
static void Read_Callback( IAsyncResult^ ar ) { StateObject^ so = safe_cast<StateObject^>(ar->AsyncState); Socket^ s = so->workSocket; int read = s->EndReceive( ar ); if ( read > 0 ) { so->sb->Append( Encoding::ASCII->GetString( so->buffer, 0, read ) ); s->BeginReceive( so->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None , gcnew AsyncCallback( &Async_Send_Receive::Read_Callback ), so ); } else { if ( so->sb->Length > 1 ) { //All of the data has been read, so displays it to the console String^ strContent = so->sb->ToString(); Console::WriteLine( String::Format( "Read {0} byte from socket" + " data = {1} ", strContent->Length, strContent ) ); } s->Close(); } }
StateObject so = (StateObject)ar.get_AsyncState(); Socket s = so.workSocket; int read = s.EndReceive(ar); if (read > 0) { so.sb.Append(Encoding.get_ASCII().GetString(so.buffer, 0, read)); s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, (SocketFlags)0, new AsyncCallback(Async_Send_Receive. Read_Callback), so); } else { if (so.sb.get_Length() > 1) { //All of the data has been read, so displays it to the console String strContent; strContent = so.sb.ToString(); Console.WriteLine(String.Format("Read {0} byte from socket" + "data = {1} ", (Int32)strContent.get_Length(), strContent)); } s.Close(); }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からSocket.EndReceiveを検索する場合は、下記のリンクをクリックしてください。

- Socket.EndReceiveのページへのリンク