Socket.EndReceiveFrom(IAsyncResult, EndPoint) Methode

Definition

Beendet einen ausstehenden asynchronen Lesevorgang von einem bestimmten Endpunkt.Ends a pending asynchronous read from a specific endpoint.

public:
 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

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.

endPoint
EndPoint

Der Quell-EndPoint.The source EndPoint.

Gibt zurück

Wenn erfolgreich, die Anzahl der empfangenen Bytes.If successful, the number of bytes received. Wenn die Ausführung nicht erfolgreich ist, wird 0 zurückgegeben.If unsuccessful, returns 0.

Ausnahmen

asyncResult ist null.asyncResult is null.

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

EndReceiveFrom(IAsyncResult, EndPoint) wurde bereits für den asynchronen Lesevorgang aufgerufen.EndReceiveFrom(IAsyncResult, EndPoint) 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 aus einem bestimmten 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 );
}
else
{
   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 );
   }
   s->Close();
}
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) {
        so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read));
        s.BeginReceiveFrom(so.buffer, 0, StateObject.BUFFER_SIZE, 0, ref tempRemoteEP,
                                 new AsyncCallback(Async_Send_Receive.ReceiveFrom_Callback), so);
}
else{
     if (so.sb.Length > 1) {
          //All 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();
     
}
   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
      so.sb.Append(Encoding.ASCII.GetString(so.buffer, 0, read))
      s.BeginReceiveFrom(so.buffer, 0, StateObject.BUFFER_SIZE, 0, tempRemoteEP, New AsyncCallback(AddressOf Async_Send_Receive.ReceiveFrom_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 EndReceiveFrom-Methode beendet den asynchronen Lesevorgang, der in der BeginReceiveFrom-Methode gestartet wurde.The EndReceiveFrom method completes the asynchronous read operation started in the BeginReceiveFrom method.

Vor dem Aufrufen von BeginReceiveFrommüssen Sie eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert.Before calling BeginReceiveFrom, 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 BeginReceiveFrom zurückgegeben hat.This callback method executes in a separate thread and is called by the system after BeginReceiveFrom returns. Die Rückruf Methode muss die IAsyncResult akzeptieren, die von der BeginReceiveFrom-Methode als Parameter zurückgegeben wird.The callback method must accept the IAsyncResult returned by the BeginReceiveFrom 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 BeginReceiveFrom-Methode übermittelt wird.Within the callback method, call the AsyncState method of the IAsyncResult to obtain the state object passed to the BeginReceiveFrom 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 EndReceiveFrom-Methode aufrufen, um den Lesevorgang erfolgreich abzuschließen und die Anzahl der gelesenen Bytes zurückzugeben.After obtaining the Socket, you can call the EndReceiveFrom method to successfully complete the read operation and return the number of bytes read.

Die EndReceiveFrom-Methode wird blockiert, bis die Daten verfügbar sind.The EndReceiveFrom method will block until data is available. Wenn Sie ein verbindungsloses Protokoll verwenden, liest EndReceiveFrom das erste in die Warteschlange eingereihte Datagramm, das im eingehenden Netzwerk Puffer verfügbar ist.If you are using a connectionless protocol, EndReceiveFrom will read the first enqueued datagram available in the incoming network buffer. Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, liest die EndReceiveFrom-Methode so viele Daten, wie Sie bis zur Anzahl der Bytes verfügbar sind, die Sie im size-Parameter der BeginReceiveFrom-Methode angegeben haben.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. Wenn der Remote Host die Socket Verbindung mit der Shutdown-Methode herunterfährt und alle verfügbaren Daten empfangen wurden, wird die EndReceiveFrom-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 EndReceiveFrom method will complete immediately and return zero bytes. Rufen Sie zum Abrufen der empfangenen Daten die AsyncState-Methode des IAsyncResult-Objekts auf, und extrahieren Sie den Puffer, der im resultierenden State-Objekt enthalten ist.To obtain the received data, call the AsyncState method of the IAsyncResult object, and extract the buffer contained in the resulting state object. Extrahieren Sie zum Identifizieren des Ursprungs Hosts die EndPoint, und wandeln Sie Sie in eine IPEndPointum.To identify the originating host, extract the EndPoint and cast it to an IPEndPoint. Verwenden Sie die IPEndPoint.Address-Methode, um die IP-Adresse und die IPEndPoint.Port Methode zum Abrufen der Portnummer abzurufen.Use the IPEndPoint.Address method to obtain the IP address and the IPEndPoint.Port method to obtain the port number.

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

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.

Gilt für: