Socket.EndReceiveFrom(IAsyncResult, EndPoint) メソッド


特定のエンドポイントからの、保留中の非同期読み込みを終了します。Ends a pending asynchronous read from a specific endpoint.

 int EndReceiveFrom(IAsyncResult ^ result, System::Net::EndPoint ^ % end_point);
public int EndReceiveFrom (IAsyncResult result, ref System.Net.EndPoint end_point);
member this.EndReceiveFrom : IAsyncResult * EndPoint -> int
Public Function EndReceiveFrom (result As IAsyncResult, ByRef end_point As EndPoint) As Integer



この非同期操作の状態情報およびユーザー定義データを格納する IAsyncResultAn IAsyncResult that stores state information and any user defined data for this asynchronous operation.


コピー元 EndPointThe source EndPoint.


正常に完了した場合は、受信したバイト数。If successful, the number of bytes received. 失敗した場合は、0 を返します。If unsuccessful, returns 0.


asyncResultnull です。asyncResult is null.

BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) メソッドへの呼び出しで asyncResult が返されませんでした。asyncResult was not returned by a call to the BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) method.

EndReceiveFrom(IAsyncResult, EndPoint) が、非同期の読み取りのために以前に呼び出されています。EndReceiveFrom(IAsyncResult, EndPoint) was previously called for the asynchronous read.

ソケットへのアクセスを試行しているときにエラーが発生しました。An error occurred when attempting to access the socket.

Socket が閉じられました。The Socket has been closed.

次のコード例では、特定の EndPointからの保留中の非同期読み取りを終了します。The following code example ends a pending asynchronous read from a specific EndPoint.

StateObject^ so = safe_cast<StateObject^>(ar->AsyncState);
Socket^ s = so->workSocket;

// Creates a temporary EndPoint to pass to EndReceiveFrom.
IPEndPoint^ sender = gcnew IPEndPoint( IPAddress::Any,0 );
EndPoint^ tempRemoteEP = safe_cast<EndPoint^>(sender);

int read = s->EndReceiveFrom( ar, tempRemoteEP );

if ( read > 0 )
   so->sb->Append( Encoding::ASCII->GetString( so->buffer, 0, read ) );
   s->BeginReceiveFrom( so->buffer, 0, StateObject::BUFFER_SIZE, SocketFlags::None,
      tempRemoteEP, gcnew AsyncCallback( &Async_Send_Receive::ReceiveFrom_Callback ), so );
   if ( so->sb->Length > 1 )
      //All the data has been read, so displays it to the console.
      String^ strContent = so->sb->ToString();
      Console::WriteLine( "Read {0} byte from socket" +
         " data = {1}", strContent->Length, strContent );
StateObject so = (StateObject) ar.AsyncState;
Socket s = so.workSocket;

   // Creates a temporary EndPoint to pass to EndReceiveFrom.
   IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint tempRemoteEP = (EndPoint)sender;

   int read = s.EndReceiveFrom(ar, ref tempRemoteEP); 

if (read > 0) {, 0, read));
        s.BeginReceiveFrom(so.buffer, 0, StateObject.BUFFER_SIZE, 0, ref tempRemoteEP,
                                 new AsyncCallback(Async_Send_Receive.ReceiveFrom_Callback), so);
     if ( > 1) {
          //All the data has been read, so displays it to the console.
          string strContent;
          strContent =;
          Console.WriteLine(String.Format("Read {0} byte from socket" + 
                           "data = {1} ", strContent.Length, strContent));
   Dim so As StateObject = CType(ar.AsyncState, StateObject)
   Dim s As Socket = so.workSocket
   ' Creates a temporary EndPoint to pass to EndReceiveFrom.
   Dim sender As New IPEndPoint(IPAddress.Any, 0)
   Dim tempRemoteEP As EndPoint = CType(sender, EndPoint)
   Dim read As Integer = s.EndReceiveFrom(ar, tempRemoteEP)
   If read > 0 Then, 0, read))
      s.BeginReceiveFrom(so.buffer, 0, StateObject.BUFFER_SIZE, 0, tempRemoteEP, New AsyncCallback(AddressOf Async_Send_Receive.ReceiveFrom_Callback), so)
      If > 1 Then
         'All the data has been read, so displays it to the console.
         Dim strContent As String
         strContent =
         Console.WriteLine([String].Format("Read {0} byte from socket" + "data = {1} ", strContent.Length, strContent))
      End If
   End If 
End Sub


EndReceiveFrom メソッドは、BeginReceiveFrom メソッドで開始された非同期の読み取り操作を完了します。The EndReceiveFrom method completes the asynchronous read operation started in the BeginReceiveFrom method.

BeginReceiveFromを呼び出す前に、AsyncCallback デリゲートを実装するコールバックメソッドを作成する必要があります。Before calling BeginReceiveFrom, you need to create a callback method that implements the AsyncCallback delegate. このコールバックメソッドは個別のスレッドで実行され、BeginReceiveFrom が返された後にシステムによって呼び出されます。This callback method executes in a separate thread and is called by the system after BeginReceiveFrom returns. コールバックメソッドは、パラメーターとして BeginReceiveFrom メソッドによって返された IAsyncResult を受け入れる必要があります。The callback method must accept the IAsyncResult returned by the BeginReceiveFrom method as a parameter.

コールバックメソッド内で、IAsyncResultAsyncState メソッドを呼び出して、BeginReceiveFrom メソッドに渡される状態オブジェクトを取得します。Within the callback method, call the AsyncState method of the IAsyncResult to obtain the state object passed to the BeginReceiveFrom method. この状態オブジェクトから受信側の Socket を抽出します。Extract the receiving Socket from this state object. Socketを取得した後、EndReceiveFrom メソッドを呼び出して、読み取り操作を正常に完了し、読み取ったバイト数を返すことができます。After obtaining the Socket, you can call the EndReceiveFrom method to successfully complete the read operation and return the number of bytes read.

EndReceiveFrom メソッドは、データが使用可能になるまでブロックします。The EndReceiveFrom method will block until data is available. コネクションレスプロトコルを使用している場合、EndReceiveFrom は、受信ネットワークバッファーで使用可能な最初のエンキューされたデータグラムを読み取ります。If you are using a connectionless protocol, EndReceiveFrom will read the first enqueued datagram available in the incoming network buffer. 接続指向プロトコルを使用している場合は、EndReceiveFrom メソッドによって、BeginReceiveFrom メソッドの size パラメーターで指定したバイト数まで、使用可能な量のデータが読み取られます。If you are using a connection-oriented protocol, the EndReceiveFrom method will read as much data as is available up to the number of bytes you specified in the size parameter of the BeginReceiveFrom method. リモートホストが Shutdown 方法で Socket 接続を終了し、使用可能なすべてのデータを受信した場合は、EndReceiveFrom メソッドが直ちに完了し、ゼロバイトが返されます。If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the EndReceiveFrom method will complete immediately and return zero bytes. 受信したデータを取得するには、IAsyncResult オブジェクトの AsyncState メソッドを呼び出し、結果の状態オブジェクトに格納されているバッファーを抽出します。To obtain the received data, call the AsyncState method of the IAsyncResult object, and extract the buffer contained in the resulting state object. 元のホストを特定するには、EndPoint を抽出し、それを IPEndPointにキャストします。To identify the originating host, extract the EndPoint and cast it to an IPEndPoint. IPEndPoint.Address メソッドを使用して IP アドレスを取得し、IPEndPoint.Port 方法を使用してポート番号を取得します。Use the IPEndPoint.Address method to obtain the IP address and the IPEndPoint.Port method to obtain the port number.


SocketExceptionを受け取った場合は、SocketException.ErrorCode プロパティを使用して、特定のエラーコードを取得します。If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. このコードを取得したら、 Windows Sockets version 2 API エラーコードのドキュメントを参照して、エラーの詳細な説明を参照してください。After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.


このメンバーは、アプリケーションでネットワーク トレースが有効にされている場合にトレース情報を出力します。This member outputs trace information when you enable network tracing in your application. 詳細については、「 .NET Framework のネットワークトレース」を参照してください。For more information, see Network Tracing in the .NET Framework.