Socket.EndSend Methode

Definition

Beendet einen ausstehenden asynchronen Sendevorgang.Ends a pending asynchronous send.

Überlädt

EndSend(IAsyncResult)

Beendet einen ausstehenden asynchronen Sendevorgang.Ends a pending asynchronous send.

EndSend(IAsyncResult, SocketError)

Beendet einen ausstehenden asynchronen Sendevorgang.Ends a pending asynchronous send.

EndSend(IAsyncResult)

Beendet einen ausstehenden asynchronen Sendevorgang.Ends a pending asynchronous send.

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

Parameter

asyncResult
IAsyncResult

Ein IAsyncResult, das Zustandsinformation für den asynchronen Vorgang speichert.An IAsyncResult that stores state information for this asynchronous operation.

Gibt zurück

Wenn erfolgreich, die Anzahl der an den Socket gesendeten Bytes, andernfalls ein Fehler aufgrund eines ungültigen Socket.If successful, the number of bytes sent to the Socket; otherwise, an invalid Socket error.

Ausnahmen

asyncResult ist null.asyncResult is null.

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

EndSend(IAsyncResult) wurde bereits für den asynchronen Sendevorgang aufgerufen.EndSend(IAsyncResult) was previously called for the asynchronous send.

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 Sendevorgang.The following code example ends a pending asynchronous send.

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

int send = s->EndSend( ar );

Console::WriteLine( "The size of the message sent was : {0}", send );

s->Close();
StateObject so = (StateObject) ar.AsyncState;
Socket s = so.workSocket;

int send = s.EndSend(ar);

   Console.WriteLine("The size of the message sent was :" + send.ToString());

s.Close();
Public Shared Sub Send_Callback(ar As IAsyncResult)

   Dim so As StateObject = CType(ar.AsyncState, StateObject)
   Dim s As Socket = so.workSocket
   
   Dim send As Integer = s.EndSend(ar)
   
   Console.WriteLine(("The size of the message sent was :" + send.ToString()))
   
   s.Close()
End Sub

Hinweise

EndSend schließt den asynchronen Sendevorgang ab, der in BeginSendgestartet wurde.EndSend completes the asynchronous send operation started in BeginSend.

Vor dem Aufrufen von BeginSendmüssen Sie eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert.Before calling BeginSend, 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 BeginSend zurückgegeben hat.This callback method executes in a separate thread and is called by the system after BeginSend returns. Die Rückruf Methode muss die IAsyncResult akzeptieren, die von der BeginSend-Methode als Parameter zurückgegeben wird.The callback method must accept the IAsyncResult returned by the BeginSend method as a parameter.

Rufen Sie innerhalb der Rückruf Methode die AsyncState-Methode des IAsyncResult-Parameters auf, um den sendenden Socketabzurufen.Within the callback method, call the AsyncState method of the IAsyncResult parameter to obtain the sending Socket. Nachdem Sie die Socketerhalten haben, können Sie die EndSend-Methode aufrufen, um den Sendevorgang erfolgreich abzuschließen und die Anzahl der gesendeten Bytes zurückzugeben.After obtaining the Socket, you can call the EndSend method to successfully complete the send operation and return the number of bytes sent.

Wenn Sie ein verbindungsloses Protokoll verwenden, wird EndSend blockiert, bis das Datagramm gesendet wird.If you are using a connectionless protocol, EndSend will block until the datagram is sent. Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, wird EndSend blockiert, bis ein Teil des Puffers gesendet wurde.If you are using a connection-oriented protocol, EndSend will block until some of the buffer was sent. Wenn der Rückgabewert von EndSend angibt, dass der Puffer nicht vollständig gesendet wurde, wird die BeginSend-Methode erneut aufgerufen, um den Puffer so zu ändern, dass die nicht gesendeten Daten enthalten sind.If the return value from EndSend indicates that the buffer was not completely sent, call the BeginSend method again, modifying the buffer to hold the unsent data.

Es gibt keine Garantie dafür, dass die gesendeten Daten sofort im Netzwerk angezeigt werden.There is no guarantee that the data you send will appear on the network immediately. Um die Netzwerkeffizienz zu erhöhen, kann das zugrunde liegende System die Übertragung verzögern, bis eine beträchtliche Menge an ausgehenden Daten gesammelt wird.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Ein erfolgreicher Abschluss der BeginSend-Methode bedeutet, dass das zugrunde liegende System über Platz verfügt, um die Daten für ein Netzwerk Sendevorgang zu puffern.A successful completion of the BeginSend method means that the underlying system has had room to buffer your data for a network send.

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

Der erfolgreiche Abschluss eines Sendevorgang weist nicht darauf hin, dass die Daten erfolgreich übermittelt wurden.The successful completion of a send does not indicate that the data was successfully delivered. Wenn innerhalb des Transport Systems kein Pufferspeicher verfügbar ist, um die zu übertragenden Daten aufzunehmen, wird der Sendevorgang blockiert, es sei denn, der Socket wurde in den nicht blockierenden Modus versetzt.If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

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

EndSend(IAsyncResult, SocketError)

Beendet einen ausstehenden asynchronen Sendevorgang.Ends a pending asynchronous send.

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

Parameter

asyncResult
IAsyncResult

Ein IAsyncResult, das Zustandsinformation für den asynchronen Vorgang speichert.An IAsyncResult that stores state information 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

Wenn erfolgreich, die Anzahl der an den Socket gesendeten Bytes, andernfalls ein Fehler aufgrund eines ungültigen Socket.If successful, the number of bytes sent to the Socket; otherwise, an invalid Socket error.

Ausnahmen

asyncResult ist null.asyncResult is null.

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

EndSend(IAsyncResult) wurde bereits für den asynchronen Sendevorgang aufgerufen.EndSend(IAsyncResult) was previously called for the asynchronous send.

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

EndSend schließt den asynchronen Sendevorgang ab, der in BeginSendgestartet wurde.EndSend completes the asynchronous send operation started in BeginSend.

Vor dem Aufrufen von BeginSendmüssen Sie eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert.Before calling BeginSend, 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 BeginSend zurückgegeben hat.This callback method executes in a separate thread and is called by the system after BeginSend returns. Die Rückruf Methode muss die IAsyncResult akzeptieren, die von der BeginSend-Methode als Parameter zurückgegeben wird.The callback method must accept the IAsyncResult returned by the BeginSend method as a parameter.

Rufen Sie innerhalb der Rückruf Methode die AsyncState-Methode des IAsyncResult-Parameters auf, um den sendenden Socketabzurufen.Within the callback method, call the AsyncState method of the IAsyncResult parameter to obtain the sending Socket. Nachdem Sie die Socketerhalten haben, können Sie die EndSend-Methode aufrufen, um den Sendevorgang erfolgreich abzuschließen und die Anzahl der gesendeten Bytes zurückzugeben.After obtaining the Socket, you can call the EndSend method to successfully complete the send operation and return the number of bytes sent.

Wenn Sie ein verbindungsloses Protokoll verwenden, wird EndSend blockiert, bis das Datagramm gesendet wird.If you are using a connectionless protocol, EndSend will block until the datagram is sent. Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, wird EndSend blockiert, bis ein Teil des Puffers gesendet wurde.If you are using a connection-oriented protocol, EndSend will block until some of the buffer was sent. Wenn der Rückgabewert von EndSend angibt, dass der Puffer nicht vollständig gesendet wurde, wird die BeginSend-Methode erneut aufgerufen, um den Puffer so zu ändern, dass die nicht gesendeten Daten enthalten sind.If the return value from EndSend indicates that the buffer was not completely sent, call the BeginSend method again, modifying the buffer to hold the unsent data.

Es gibt keine Garantie dafür, dass die gesendeten Daten sofort im Netzwerk angezeigt werden.There is no guarantee that the data you send will appear on the network immediately. Um die Netzwerkeffizienz zu erhöhen, kann das zugrunde liegende System die Übertragung verzögern, bis eine beträchtliche Menge an ausgehenden Daten gesammelt wird.To increase network efficiency, the underlying system may delay transmission until a significant amount of outgoing data is collected. Ein erfolgreicher Abschluss der BeginSend-Methode bedeutet, dass das zugrunde liegende System über Platz verfügt, um die Daten für ein Netzwerk Sendevorgang zu puffern.A successful completion of the BeginSend method means that the underlying system has had room to buffer your data for a network send.

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

Der erfolgreiche Abschluss eines Sendevorgang weist nicht darauf hin, dass die Daten erfolgreich übermittelt wurden.The successful completion of a send does not indicate that the data was successfully delivered. Wenn innerhalb des Transport Systems kein Pufferspeicher verfügbar ist, um die zu übertragenden Daten aufzunehmen, wird der Sendevorgang blockiert, es sei denn, der Socket wurde in den nicht blockierenden Modus versetzt.If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode.

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: