Socket.EndReceive Methode

Definition

Beendet einen ausstehenden asynchronen Lesevorgang.Ends a pending asynchronous read.

Überlädt

EndReceive(IAsyncResult)

Beendet einen ausstehenden asynchronen Lesevorgang.Ends a pending asynchronous read.

EndReceive(IAsyncResult, SocketError)

Beendet einen ausstehenden asynchronen Lesevorgang.Ends a pending asynchronous read.

EndReceive(IAsyncResult)

Beendet einen ausstehenden asynchronen Lesevorgang.Ends a pending asynchronous read.

public:
 int EndReceive(IAsyncResult ^ result);
public int EndReceive (IAsyncResult result);
member this.EndReceive : IAsyncResult -> int
Public Function EndReceive (result As IAsyncResult) As Integer

Parameter

asyncResult
IAsyncResult

Ein IAsyncResult, das Zustandsinformationen über diesen asynchronen Vorgang sowie ggf. vorhandene benutzerdefinierte Daten speichert.An IAsyncResult that stores state information and any user defined data for this asynchronous operation.

Gibt zurück

Die Anzahl der empfangenen Bytes.The number of bytes received.

Ausnahmen

asyncResult ist null.asyncResult is null.

asyncResult wurde nicht durch einen Aufruf der BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)-Methode zurückgegeben.asyncResult was not returned by a call to the BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) method.

EndReceive(IAsyncResult) wurde bereits für den asynchronen Lesevorgang aufgerufen.EndReceive(IAsyncResult) was previously called for the asynchronous read.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket.

Der Socket wurde geschlossen.The Socket has been closed.

Beispiele

Das folgende Codebeispiel beendet einen ausstehenden asynchronen Lesevorgang.The following code example ends a pending asynchronous read. Ein umfassendes Beispiel, in dem die asynchrone Kommunikation mit Sockets veranschaulicht wird, finden Sie unter Beispiele für Socket-Code.For a complete example that demonstrates asynchronous communications with sockets, see Socket Code Examples.

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();
   }
}
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();
    }
}
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

Hinweise

Die EndReceive-Methode beendet den asynchronen Lesevorgang, der in der BeginReceive-Methode gestartet wurde.The EndReceive method completes the asynchronous read operation started in the BeginReceive method.

Vor dem Aufrufen von BeginReceivemüssen Sie eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert.Before calling BeginReceive, you need to create a callback method that implements the AsyncCallback delegate. Diese Rückruf Methode wird in einem separaten Thread ausgeführt und vom System aufgerufen, nachdem BeginReceive zurückgegeben hat.This callback method executes in a separate thread and is called by the system after BeginReceive returns. Die Rückruf Methode muss die IAsyncResult akzeptieren, die von der BeginReceive-Methode als Parameter zurückgegeben wird.The callback method must accept the IAsyncResult returned by the BeginReceive method as a parameter.

Rufen Sie innerhalb der Rückruf Methode die AsyncState-Methode des IAsyncResult auf, um das State-Objekt abzurufen, das an die BeginReceive-Methode übermittelt wird.Within the callback method, call the AsyncState method of the IAsyncResult to obtain the state object passed to the BeginReceive method. Extrahieren Sie das empfangende Socket aus diesem Zustands Objekt.Extract the receiving Socket from this state object. Nachdem Sie die Socketerhalten haben, können Sie die EndReceive-Methode aufrufen, um den Lesevorgang erfolgreich abzuschließen und die Anzahl der gelesenen Bytes zurückzugeben.After obtaining the Socket, you can call the EndReceive method to successfully complete the read operation and return the number of bytes read.

Die EndReceive-Methode wird blockiert, bis die Daten verfügbar sind.The EndReceive method will block until data is available. Wenn Sie ein verbindungsloses Protokoll verwenden, liest EndReceive das erste in die Warteschlange eingereihte Datagramm, das im eingehenden Netzwerk Puffer verfügbar ist.If you are using a connectionless protocol, EndReceive will read the first enqueued datagram available in the incoming network buffer. Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, liest die EndReceive-Methode so viele Daten, wie Sie bis zur Anzahl der Bytes verfügbar sind, die Sie im size-Parameter der BeginReceive-Methode angegeben haben.If you are using a connection-oriented protocol, the EndReceive method will read as much data as is available up to the number of bytes you specified in the size parameter of the BeginReceive method. Wenn der Remote Host die Socket Verbindung mit der Shutdown-Methode herunterfährt und alle verfügbaren Daten empfangen wurden, wird die EndReceive-Methode sofort abgeschlossen und gibt NULL Bytes zurück.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the EndReceive method will complete immediately and return zero bytes.

Rufen Sie zum Abrufen der empfangenen Daten die AsyncState-Methode des IAsyncResultauf, und extrahieren Sie den Puffer, der im resultierenden State-Objekt enthalten ist.To obtain the received data, call the AsyncState method of the IAsyncResult, and extract the buffer contained in the resulting state object.

Um einen ausstehenden BeginReceiveabzubrechen, rufen Sie die Close-Methode auf.To cancel a pending BeginReceive, call the Close method.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Nachdem Sie diesen Code abgerufen haben, finden Sie in der API-Fehlercode Dokumentation der Windows Sockets, Version 2 , eine ausführliche Beschreibung des Fehlers.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Hinweis

Alle e/a-Vorgänge, die von einem bestimmten Thread initiiert werden, werden beim Beenden des Threads abgebrochen.All I/O initiated by a given thread is canceled when that thread exits. Ein ausstehender asynchroner Vorgang kann fehlschlagen, wenn der Thread beendet wird, bevor der Vorgang abgeschlossen ist.A pending asynchronous operation can fail if the thread exits before the operation completes.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren.This member outputs trace information when you enable network tracing in your application. Weitere Informationen finden Sie unter Netzwerk Ablauf Verfolgung in der .NET Framework.For more information, see Network Tracing in the .NET Framework.

Siehe auch

EndReceive(IAsyncResult, SocketError)

Beendet einen ausstehenden asynchronen Lesevorgang.Ends a pending asynchronous read.

public:
 int EndReceive(IAsyncResult ^ asyncResult, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode);
public int EndReceive (IAsyncResult asyncResult, out System.Net.Sockets.SocketError errorCode);
member this.EndReceive : IAsyncResult * SocketError -> int
Public Function EndReceive (asyncResult As IAsyncResult, ByRef errorCode As SocketError) As Integer

Parameter

asyncResult
IAsyncResult

Ein IAsyncResult, das Zustandsinformationen über diesen asynchronen Vorgang sowie ggf. vorhandene benutzerdefinierte Daten speichert.An IAsyncResult that stores state information and any user defined data for this asynchronous operation.

errorCode
SocketError

Ein SocketError-Objekt, in dem der Socketfehler gespeichert wird.A SocketError object that stores the socket error.

Gibt zurück

Die Anzahl der empfangenen Bytes.The number of bytes received.

Ausnahmen

asyncResult ist null.asyncResult is null.

asyncResult wurde nicht durch einen Aufruf der BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)-Methode zurückgegeben.asyncResult was not returned by a call to the BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) method.

EndReceive(IAsyncResult) wurde bereits für den asynchronen Lesevorgang aufgerufen.EndReceive(IAsyncResult) was previously called for the asynchronous read.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket.

Der Socket wurde geschlossen.The Socket has been closed.

Hinweise

Die EndReceive-Methode beendet den asynchronen Lesevorgang, der in der BeginReceive-Methode gestartet wurde.The EndReceive method completes the asynchronous read operation started in the BeginReceive method.

Vor dem Aufrufen von BeginReceivemüssen Sie eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert.Before calling BeginReceive, you need to create a callback method that implements the AsyncCallback delegate. Diese Rückruf Methode wird in einem separaten Thread ausgeführt und vom System aufgerufen, nachdem BeginReceive zurückgegeben hat.This callback method executes in a separate thread and is called by the system after BeginReceive returns. Die Rückruf Methode muss die IAsyncResult akzeptieren, die von der BeginReceive-Methode als Parameter zurückgegeben wird.The callback method must accept the IAsyncResult returned by the BeginReceive method as a parameter.

Rufen Sie innerhalb der Rückruf Methode die AsyncState-Methode des IAsyncResult auf, um das State-Objekt abzurufen, das an die BeginReceive-Methode übermittelt wird.Within the callback method, call the AsyncState method of the IAsyncResult to obtain the state object passed to the BeginReceive method. Extrahieren Sie das empfangende Socket aus diesem Zustands Objekt.Extract the receiving Socket from this state object. Nachdem Sie die Socketerhalten haben, können Sie die EndReceive-Methode aufrufen, um den Lesevorgang erfolgreich abzuschließen und die Anzahl der gelesenen Bytes zurückzugeben.After obtaining the Socket, you can call the EndReceive method to successfully complete the read operation and return the number of bytes read.

Die EndReceive-Methode wird blockiert, bis die Daten verfügbar sind.The EndReceive method will block until data is available. Wenn Sie ein verbindungsloses Protokoll verwenden, liest EndReceive das erste in die Warteschlange eingereihte Datagramm, das im eingehenden Netzwerk Puffer verfügbar ist.If you are using a connectionless protocol, EndReceive will read the first enqueued datagram available in the incoming network buffer. Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, liest die EndReceive-Methode so viele Daten, wie Sie bis zur Anzahl der Bytes verfügbar sind, die Sie im size-Parameter der BeginReceive-Methode angegeben haben.If you are using a connection-oriented protocol, the EndReceive method will read as much data as is available up to the number of bytes you specified in the size parameter of the BeginReceive method. Wenn der Remote Host die Socket Verbindung mit der Shutdown-Methode herunterfährt und alle verfügbaren Daten empfangen wurden, wird die EndReceive-Methode sofort abgeschlossen und gibt NULL Bytes zurück.If the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the EndReceive method will complete immediately and return zero bytes.

Rufen Sie zum Abrufen der empfangenen Daten die AsyncState-Methode des IAsyncResultauf, und extrahieren Sie den Puffer, der im resultierenden State-Objekt enthalten ist.To obtain the received data, call the AsyncState method of the IAsyncResult, and extract the buffer contained in the resulting state object.

Hinweis

Wenn Sie erhalten eine SocketException, verwenden die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Nachdem Sie diesen Code abgerufen haben, finden Sie in der API-Fehlercode Dokumentation der Windows Sockets, Version 2 , eine ausführliche Beschreibung des Fehlers.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Hinweis

Alle e/a-Vorgänge, die von einem bestimmten Thread initiiert werden, werden beim Beenden des Threads abgebrochen.All I/O initiated by a given thread is canceled when that thread exits. Ein ausstehender asynchroner Vorgang kann fehlschlagen, wenn der Thread beendet wird, bevor der Vorgang abgeschlossen ist.A pending asynchronous operation can fail if the thread exits before the operation completes.

Hinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren.This member outputs trace information when you enable network tracing in your application. Weitere Informationen finden Sie unter Netzwerk Ablauf Verfolgung in der .NET Framework.For more information, see Network Tracing in the .NET Framework.

Siehe auch

Gilt für: