Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Socket.EndReceiveFrom-Methode: (IAsyncResult, EndPoint)

 

Veröffentlicht: Oktober 2016

Beendet einen ausstehenden asynchronen Lesevorgang von einem bestimmten Endpunkt.

Namespace:   System.Net.Sockets
Assembly:  System (in System.dll)

public int EndReceiveFrom(
	IAsyncResult asyncResult,
	ref EndPoint endPoint
)

Parameter

asyncResult
Type: System.IAsyncResult

Ein IAsyncResult Statusinformationen und benutzerdefinierte Daten für diesen asynchronen Vorgang speichert.

endPoint
Type: System.Net.EndPoint

Der Quell-EndPoint.

Rückgabewert

Type: System.Int32

Wenn erfolgreich, erhalten die Anzahl der Bytes. Wenn dies nicht gelingt, wird 0 zurückgegeben.

Exception Condition
ArgumentNullException

asyncResult ist null.

ArgumentException

asyncResult wurde nicht durch einen Aufruf von zurückgegeben, die BeginReceiveFrom Methode.

InvalidOperationException

EndReceiveFrom wurde bereits für den asynchronen Lesevorgang aufgerufen.

SocketException

Fehler beim Versuch, auf den Socket zuzugreifen. Weitere Informationen finden Sie im Abschnitt Hinweise.

ObjectDisposedException

Der Socket wurde geschlossen.

Die EndReceiveFrom -Methode schließt den asynchronen Lesevorgang gestartet, die BeginReceiveFrom Methode.

Vor dem Aufruf von BeginReceiveFrom, müssen Sie eine Rückrufmethode erstellen, die implementiert die AsyncCallback delegieren. Diese Rückrufmethode wird in einem separaten Thread ausgeführt und vom System nach aufgerufenBeginReceiveFrom zurückgibt. Die Rückrufmethode muss akzeptieren die IAsyncResult zurückgegebene der BeginReceiveFrom -Methode als Parameter.

Rufen Sie in der Rückrufmethode die AsyncState Methode der IAsyncResult zum Abrufen des Status übergeben des Objekts an die BeginReceiveFrom Methode. Extrahieren Sie den Empfangs- Socket aus diesem Zustandsobjekt. Nach dem Erhalt der Socket, rufen Sie die EndReceiveFrom -Methode erfolgreich den Lesevorgang abgeschlossen und die Anzahl der gelesenen Bytes zurück.

Die EndReceiveFrom -Methode blockiert, bis Daten verfügbar sind. Wenn Sie ein verbindungsloses Protokoll, arbeiten EndReceiveFrom liest das erste Datagramm in der eingehenden Netzwerkpuffer verfügbar. Wenn Sie ein verbindungsorientiertes Protokoll verwenden die EndReceiveFrom Methode liest bis zu der Anzahl von Bytes verfügbar ist, im angegebenen, Daten der size Parameter von der BeginReceiveFrom Methode. Wenn der Remotehost die Socket Verbindung mit der Shutdown -Methode und alle verfügbaren Daten empfangen wurden, die EndReceiveFrom Methode sofort beendet und gibt 0 (null) Bytes zurück. Um die empfangenen Daten zu erhalten, rufen Sie die AsyncState Methode der IAsyncResult Objekt und den im resultierenden Zustandsobjekt enthaltenen Puffer extrahieren. Um den ursprünglichen Host zu identifizieren, extrahieren Sie die EndPoint und wandeln Sie ihn in ein IPEndPoint. Verwenden der IPEndPoint.Address Methode, um die IP-Adresse und die IPEndPoint.Port Methode, um die Portnummer abzurufen.

System_CAPS_noteHinweis

Erhalten Sie eine SocketException, verwenden Sie die SocketException.ErrorCode Eigenschaft, um den spezifischen Fehlercode zu erhalten. Nachdem Sie diesen Code erhalten haben, finden Sie in der Windows Sockets-Version 2-API-Fehler-Code-Dokumentation in der MSDN Library für eine ausführliche Beschreibung des Fehlers.

System_CAPS_noteHinweis

Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung in .NET Framework.

Im folgenden Codebeispiel wird einen ausstehenden asynchronen Lesevorgang von einem bestimmten endet EndPoint.

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

}

.NET Framework
Verfügbar seit 1.1
Zurück zum Anfang
Anzeigen: