Socket.BeginSend Methode

Definition

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

Überlädt

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSend (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, AsyncCallback callback, object state);
member this.BeginSend : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult

Parameter

buffers
IList<ArraySegment<Byte>>

Ein Array vom Typ Byte, das die zu sendenden Daten enthält.An array of type Byte that contains the data to send.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.A bitwise combination of the SocketFlags values.

callback
AsyncCallback

Der AsyncCallback-Delegat.The AsyncCallback delegate.

state
Object

Ein Objekt mit Zustandsinformationen für diese Anforderung.An object that contains state information for this request.

Gibt zurück

Ein IAsyncResult, das auf den asynchronen Sendevorgang verweist.An IAsyncResult that references the asynchronous send.

Ausnahmen

buffers ist null.buffers is null.

buffers ist leer.buffers is empty.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket. Weitere Informationen finden Sie unten im Abschnitt Hinweise.See remarks section below.

Der Socket wurde geschlossen.The Socket has been closed.

Hinweise

Die BeginSend-Methode startet einen asynchronen Sendevorgang an den Remote Host, der in der Connect-, BeginConnect-, Accept-oder BeginAccept-Methode eingerichtet wurde.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend löst eine Ausnahme aus, wenn Sie nicht zuerst Accept, BeginAccept, Connectoder BeginConnectaufgerufen haben.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Wenn Sie die BeginSend-Methode aufrufen, haben Sie die Möglichkeit, Daten in einem separaten Ausführungs Thread zu senden.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Sie können eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert und seinen Namen an die BeginSend-Methode übergibt.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Um dies zu erreichen, muss der state Parameter den verbundenen oder den Standard Socket enthalten, der für die Kommunikation verwendet wird.To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. Wenn Ihr Rückruf Weitere Informationen benötigt, können Sie eine kleine Klasse oder Struktur erstellen, die die Socket und die anderen erforderlichen Informationen enthält.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Übergeben Sie mithilfe des state-Parameters eine Instanz dieser Klasse an die BeginSend-Methode.Pass an instance of this class to the BeginSend method through the state parameter.

Die Rückruf Methode sollte die EndSend-Methode aufrufen.Your callback method should invoke the EndSend method. Wenn die Anwendung BeginSendaufruft, verwendet das System einen separaten Thread, um die angegebene Rückruf Methode auszuführen, und blockiert EndSend, bis der Socket die Anzahl der angeforderten Bytes sendet oder eine Ausnahme auslöst.When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. Wenn Sie möchten, dass der ursprüngliche Thread blockiert wird, nachdem Sie die BeginSend-Methode aufgerufen haben, verwenden Sie die WaitHandle.WaitOne-Methode.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Rufen Sie die Set-Methode für ein T:System.Threading.ManualResetEvent in der Rückruf Methode auf, wenn der ursprüngliche Thread weiter ausgeführt werden soll.Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. Weitere Informationen zum Schreiben von Rückruf Methoden finden Sie unter Mars Hallen eines Delegaten als Rückruf Methode.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Obwohl BeginSend für Verbindungs orientierte Protokolle vorgesehen ist, kann auch für verbindungslose Protokolle verwendet werden, vorausgesetzt, dass Sie zuerst die Connect oder BeginConnect-Methode zum Einrichten eines Standard Remote Hosts aufzurufen.Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. Wenn Sie ein verbindungsloses Protokoll verwenden und planen, Daten an mehrere verschiedene Hosts zu senden, sollten Sie BeginSendToverwenden.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Es ist in Ordnung, BeginSendTo auch dann zu verwenden, wenn Sie einen Standard-Remote Host mit Connecteingerichtet haben.It is okay to use BeginSendTo even after you have established a default remote host with Connect. Sie können den Standard Remote Host auch vor dem Aufrufen von BeginSend ändern, indem Sie Connect oder BeginConnectaufrufen.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Bei Verbindungs losen Protokollen müssen Sie auch sicherstellen, dass die Größe des Puffers nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters überschreitet.With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. Wenn dies der Fall ist, wird das Datagramm nicht gesendet, und BeginSend löst eine SocketExceptionaus.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die Daten, die Sie senden, nicht weitergeleitet.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

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

state ist eine Instanziierung einer benutzerdefinierten Klasse.state is an instantiation of a user-defined class.

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.

Hinweis

Der Ausführungs Kontext (der Sicherheitskontext, der Benutzer, dessen Identität angenommen wurde, und der aufrufende Kontext) wird für die asynchronen Socket Methoden zwischengespeichert.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. Nach der ersten Verwendung eines bestimmten Kontexts (einer bestimmten asynchronen Socket Methode, einer bestimmten Socket Instanz und eines bestimmten Rückrufs) wird bei der nachfolgenden Verwendung dieses Kontexts eine Leistungsverbesserung angezeigt.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

Siehe auch

BeginSend(IList<ArraySegment<Byte>>, SocketFlags, SocketError, AsyncCallback, Object)

Wichtig

Diese API ist nicht CLS-kompatibel.

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ buffers, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode, AsyncCallback ^ callback, System::Object ^ state);
[System.CLSCompliant(false)]
public IAsyncResult BeginSend (System.Collections.Generic.IList<ArraySegment<byte>> buffers, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
member this.BeginSend : System.Collections.Generic.IList<ArraySegment<byte>> * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult

Parameter

buffers
IList<ArraySegment<Byte>>

Ein Array vom Typ Byte, das die zu sendenden Daten enthält.An array of type Byte that contains the data to send.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.A bitwise combination of the SocketFlags values.

errorCode
SocketError

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

callback
AsyncCallback

Der AsyncCallback-Delegat.The AsyncCallback delegate.

state
Object

Ein Objekt mit Zustandsinformationen für diese Anforderung.An object that contains state information for this request.

Gibt zurück

Ein IAsyncResult, das auf den asynchronen Sendevorgang verweist.An IAsyncResult that references the asynchronous send.

Attribute

Ausnahmen

buffers ist null.buffers is null.

buffers ist leer.buffers is empty.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket. Weitere Informationen finden Sie unten im Abschnitt Hinweise.See remarks section below.

Der Socket wurde geschlossen.The Socket has been closed.

Hinweise

Die BeginSend-Methode startet einen asynchronen Sendevorgang an den Remote Host, der in der Connect-, BeginConnect-, Accept-oder BeginAccept-Methode eingerichtet wurde.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend löst eine Ausnahme aus, wenn Sie nicht zuerst Accept, BeginAccept, Connectoder BeginConnectaufgerufen haben.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Wenn Sie die BeginSend-Methode aufrufen, haben Sie die Möglichkeit, Daten in einem separaten Ausführungs Thread zu senden.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Sie können eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert und seinen Namen an die BeginSend-Methode übergibt.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Um dies zu erreichen, muss der state Parameter den verbundenen oder den Standard Socket enthalten, der für die Kommunikation verwendet wird.To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. Wenn Ihr Rückruf Weitere Informationen benötigt, können Sie eine kleine Klasse oder Struktur erstellen, die die Socket und die anderen erforderlichen Informationen enthält.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Übergeben Sie mithilfe des state-Parameters eine Instanz dieser Klasse an die BeginSend-Methode.Pass an instance of this class to the BeginSend method through the state parameter.

Die Rückruf Methode sollte die EndSend-Methode aufrufen.Your callback method should invoke the EndSend method. Wenn die Anwendung BeginSendaufruft, verwendet das System einen separaten Thread, um die angegebene Rückruf Methode auszuführen, und blockiert EndSend, bis der Socket die Anzahl der angeforderten Bytes sendet oder eine Ausnahme auslöst.When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. Wenn Sie möchten, dass der ursprüngliche Thread blockiert wird, nachdem Sie die BeginSend-Methode aufgerufen haben, verwenden Sie die WaitHandle.WaitOne-Methode.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Rufen Sie die Set-Methode für eine ManualResetEvent in der Rückruf Methode auf, wenn der ursprüngliche Thread weiter ausgeführt werden soll.Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing. Weitere Informationen zum Schreiben von Rückruf Methoden finden Sie unter Mars Hallen eines Delegaten als Rückruf Methode.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Obwohl BeginSend für Verbindungs orientierte Protokolle vorgesehen ist, kann auch für verbindungslose Protokolle verwendet werden, vorausgesetzt, dass Sie zuerst die Connect oder BeginConnect-Methode zum Einrichten eines Standard Remote Hosts aufzurufen.Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. Wenn Sie ein verbindungsloses Protokoll verwenden und planen, Daten an mehrere verschiedene Hosts zu senden, sollten Sie BeginSendToverwenden.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Es ist in Ordnung, BeginSendTo auch dann zu verwenden, wenn Sie einen Standard-Remote Host mit Connecteingerichtet haben.It is okay to use BeginSendTo even after you have established a default remote host with Connect. Sie können den Standard Remote Host auch vor dem Aufrufen von BeginSend ändern, indem Sie Connect oder BeginConnectaufrufen.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Bei Verbindungs losen Protokollen müssen Sie auch sicherstellen, dass die Größe des Puffers nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters überschreitet.With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. Wenn dies der Fall ist, wird das Datagramm nicht gesendet, und BeginSend löst eine SocketExceptionaus.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die Daten, die Sie senden, nicht weitergeleitet.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

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

state ist eine Instanziierung einer benutzerdefinierten Klasse.state is an instantiation of a user-defined class.

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.

Hinweis

Der Ausführungs Kontext (der Sicherheitskontext, der Benutzer, dessen Identität angenommen wurde, und der aufrufende Kontext) wird für die asynchronen Socket Methoden zwischengespeichert.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. Nach der ersten Verwendung eines bestimmten Kontexts (einer bestimmten asynchronen Socket Methode, einer bestimmten Socket Instanz und eines bestimmten Rückrufs) wird bei der nachfolgenden Verwendung dieses Kontexts eine Leistungsverbesserung angezeigt.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

Siehe auch

BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socketFlags, [Runtime::InteropServices::Out] System::Net::Sockets::SocketError % errorCode, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSend (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags, out System.Net.Sockets.SocketError errorCode, AsyncCallback callback, object state);
member this.BeginSend : byte[] * int * int * System.Net.Sockets.SocketFlags * SocketError * AsyncCallback * obj -> IAsyncResult

Parameter

buffer
Byte[]

Ein Array vom Typ Byte, das die zu sendenden Daten enthält.An array of type Byte that contains the data to send.

offset
Int32

Die nullbasierte Position im buffer-Parameter, an der mit dem Senden der Daten begonnen werden soll.The zero-based position in the buffer parameter at which to begin sending data.

size
Int32

Die Anzahl von Bytes, die gesendet werden sollen.The number of bytes to send.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.A bitwise combination of the SocketFlags values.

errorCode
SocketError

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

callback
AsyncCallback

Der AsyncCallback-Delegat.The AsyncCallback delegate.

state
Object

Ein Objekt mit Zustandsinformationen für diese Anforderung.An object that contains state information for this request.

Gibt zurück

Ein IAsyncResult, das auf den asynchronen Sendevorgang verweist.An IAsyncResult that references the asynchronous send.

Ausnahmen

buffer ist null.buffer is null.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket. Weitere Informationen finden Sie unten im Abschnitt Hinweise.See remarks section below.

offset ist kleiner als 0.offset is less than 0.

- oder --or- offset ist kleiner als die Länge von buffer.offset is less than the length of buffer.

- oder --or- size ist kleiner als 0.size is less than 0.

- oder --or- size ist größer als die Länge von buffer minus dem Wert des offset -Parameters.size is greater than the length of buffer minus the value of the offset parameter.

Der Socket wurde geschlossen.The Socket has been closed.

Hinweise

Die BeginSend-Methode startet einen asynchronen Sendevorgang an den Remote Host, der in der Connect-, BeginConnect-, Accept-oder BeginAccept-Methode eingerichtet wurde.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend löst eine Ausnahme aus, wenn Sie nicht zuerst Accept, BeginAccept, Connectoder BeginConnectaufgerufen haben.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Wenn Sie die BeginSend-Methode aufrufen, haben Sie die Möglichkeit, Daten in einem separaten Ausführungs Thread zu senden.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Sie können eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert und seinen Namen an die BeginSend-Methode übergibt.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Um dies zu erreichen, muss der state Parameter den verbundenen oder den Standard Socket enthalten, der für die Kommunikation verwendet wird.To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. Wenn Ihr Rückruf Weitere Informationen benötigt, können Sie eine kleine Klasse oder Struktur erstellen, die die Socket und die anderen erforderlichen Informationen enthält.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Übergeben Sie mithilfe des state-Parameters eine Instanz dieser Klasse an die BeginSend-Methode.Pass an instance of this class to the BeginSend method through the state parameter.

Die Rückruf Methode sollte die EndSend-Methode aufrufen.Your callback method should invoke the EndSend method. Wenn die Anwendung BeginSendaufruft, verwendet das System einen separaten Thread, um die angegebene Rückruf Methode auszuführen, und blockiert EndSend, bis der Socket die Anzahl der angeforderten Bytes sendet oder eine Ausnahme auslöst.When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. Wenn Sie möchten, dass der ursprüngliche Thread blockiert wird, nachdem Sie die BeginSend-Methode aufgerufen haben, verwenden Sie die WaitHandle.WaitOne-Methode.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Rufen Sie die Set-Methode für ein T:System.Threading.ManualResetEvent in der Rückruf Methode auf, wenn der ursprüngliche Thread weiter ausgeführt werden soll.Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. Weitere Informationen zum Schreiben von Rückruf Methoden finden Sie unter Mars Hallen eines Delegaten als Rückruf Methode.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Obwohl BeginSend für Verbindungs orientierte Protokolle vorgesehen ist, kann auch für verbindungslose Protokolle verwendet werden, vorausgesetzt, dass Sie zuerst die Connect oder BeginConnect-Methode zum Einrichten eines Standard Remote Hosts aufzurufen.Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. Wenn Sie ein verbindungsloses Protokoll verwenden und planen, Daten an mehrere verschiedene Hosts zu senden, sollten Sie BeginSendToverwenden.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Es ist in Ordnung, BeginSendTo auch dann zu verwenden, wenn Sie einen Standard-Remote Host mit Connecteingerichtet haben.It is okay to use BeginSendTo even after you have established a default remote host with Connect. Sie können den Standard Remote Host auch vor dem Aufrufen von BeginSend ändern, indem Sie Connect oder BeginConnectaufrufen.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Bei Verbindungs losen Protokollen müssen Sie auch sicherstellen, dass die Größe des Puffers nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters überschreitet.With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. Wenn dies der Fall ist, wird das Datagramm nicht gesendet, und BeginSend löst eine SocketExceptionaus.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die Daten, die Sie senden, nicht weitergeleitet.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

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

state ist eine Instanziierung einer benutzerdefinierten Klasse.state is an instantiation of a user-defined class.

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.

Hinweis

Der Ausführungs Kontext (der Sicherheitskontext, der Benutzer, dessen Identität angenommen wurde, und der aufrufende Kontext) wird für die asynchronen Socket Methoden zwischengespeichert.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. Nach der ersten Verwendung eines bestimmten Kontexts (einer bestimmten asynchronen Socket Methode, einer bestimmten Socket Instanz und eines bestimmten Rückrufs) wird bei der nachfolgenden Verwendung dieses Kontexts eine Leistungsverbesserung angezeigt.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

Siehe auch

BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.Sends data asynchronously to a connected Socket.

public:
 IAsyncResult ^ BeginSend(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socket_flags, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSend (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socket_flags, AsyncCallback callback, object state);
member this.BeginSend : byte[] * int * int * System.Net.Sockets.SocketFlags * AsyncCallback * obj -> IAsyncResult
Public Function BeginSend (buffer As Byte(), offset As Integer, size As Integer, socket_flags As SocketFlags, callback As AsyncCallback, state As Object) As IAsyncResult

Parameter

buffer
Byte[]

Ein Array vom Typ Byte, das die zu sendenden Daten enthält.An array of type Byte that contains the data to send.

offset
Int32

Die nullbasierte Position im buffer-Parameter, an der mit dem Senden der Daten begonnen werden soll.The zero-based position in the buffer parameter at which to begin sending data.

size
Int32

Die Anzahl von Bytes, die gesendet werden sollen.The number of bytes to send.

socketFlags
SocketFlags

Eine bitweise Kombination der SocketFlags-Werte.A bitwise combination of the SocketFlags values.

callback
AsyncCallback

Der AsyncCallback-Delegat.The AsyncCallback delegate.

state
Object

Ein Objekt mit Zustandsinformationen für diese Anforderung.An object that contains state information for this request.

Gibt zurück

Ein IAsyncResult, das auf den asynchronen Sendevorgang verweist.An IAsyncResult that references the asynchronous send.

Ausnahmen

buffer ist null.buffer is null.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket. Weitere Informationen finden Sie unten im Abschnitt Hinweise.See remarks section below.

offset ist kleiner als 0.offset is less than 0.

- oder --or- offset ist kleiner als die Länge von buffer.offset is less than the length of buffer.

- oder --or- size ist kleiner als 0.size is less than 0.

- oder --or- size ist größer als die Länge von buffer minus dem Wert des offset -Parameters.size is greater than the length of buffer minus the value of the offset parameter.

Der Socket wurde geschlossen.The Socket has been closed.

Beispiele

Das folgende Codebeispiel beginnt mit dem asynchronen Senden von Daten an einen Remote Host.The following code example begins asynchronously sending data to a remote host.

allDone->Set();
Socket^ s = safe_cast<Socket^>(ar->AsyncState);
s->EndConnect( ar );
StateObject^ so2 = gcnew StateObject;
so2->workSocket = s;
array<Byte>^ buff = Encoding::ASCII->GetBytes( "This is a test" );
s->BeginSend( buff, 0, buff->Length, SocketFlags::None,
   gcnew AsyncCallback( &Async_Send_Receive::Send_Callback ), so2 );
allDone.Set();
Socket s = (Socket) ar.AsyncState;
s.EndConnect(ar);
StateObject so2 = new StateObject();
so2.workSocket = s;
byte[] buff = Encoding.ASCII.GetBytes("This is a test");
s.BeginSend(buff, 0, buff.Length,0,
                      new AsyncCallback(Async_Send_Receive.Send_Callback), so2);    
Public Shared Sub Connect_Callback(ar As IAsyncResult)
   

   allDone.Set()
   Dim s As Socket = CType(ar.AsyncState, Socket)
   s.EndConnect(ar)
   Dim so2 As New StateObject()
   so2.workSocket = s
   Dim buff As Byte() = Encoding.ASCII.GetBytes("This is a test")
   s.BeginSend(buff, 0, buff.Length, 0, New AsyncCallback(AddressOf Async_Send_Receive.Send_Callback), so2)
End Sub

Hinweise

Die BeginSend-Methode startet einen asynchronen Sendevorgang an den Remote Host, der in der Connect-, BeginConnect-, Accept-oder BeginAccept-Methode eingerichtet wurde.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend löst eine Ausnahme aus, wenn Sie nicht zuerst Accept, BeginAccept, Connectoder BeginConnectaufgerufen haben.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Wenn Sie die BeginSend-Methode aufrufen, haben Sie die Möglichkeit, Daten in einem separaten Ausführungs Thread zu senden.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Sie können eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert und seinen Namen an die BeginSend-Methode übergibt.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Um dies zu erreichen, muss der state Parameter den verbundenen oder den Standard Socket enthalten, der für die Kommunikation verwendet wird.To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. Wenn Ihr Rückruf Weitere Informationen benötigt, können Sie eine kleine Klasse oder Struktur erstellen, die die Socket und die anderen erforderlichen Informationen enthält.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Übergeben Sie mithilfe des state-Parameters eine Instanz dieser Klasse an die BeginSend-Methode.Pass an instance of this class to the BeginSend method through the state parameter.

Die Rückruf Methode sollte die EndSend-Methode aufrufen.Your callback method should invoke the EndSend method. Wenn die Anwendung BeginSendaufruft, verwendet das System einen separaten Thread, um die angegebene Rückruf Methode auszuführen, und blockiert EndSend, bis der Socket die Anzahl der angeforderten Bytes sendet oder eine Ausnahme auslöst.When your application calls BeginSend, the system will use a separate thread to execute the specified callback method, and will block on EndSend until the Socket sends the number of bytes requested or throws an exception. Wenn Sie möchten, dass der ursprüngliche Thread blockiert wird, nachdem Sie die BeginSend-Methode aufgerufen haben, verwenden Sie die WaitHandle.WaitOne-Methode.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Rufen Sie die Set-Methode für ein T:System.Threading.ManualResetEvent in der Rückruf Methode auf, wenn der ursprüngliche Thread weiter ausgeführt werden soll.Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. Weitere Informationen zum Schreiben von Rückruf Methoden finden Sie unter Mars Hallen eines Delegaten als Rückruf Methode.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Obwohl BeginSend für Verbindungs orientierte Protokolle vorgesehen ist, kann auch für verbindungslose Protokolle verwendet werden, vorausgesetzt, dass Sie zuerst die Connect oder BeginConnect-Methode zum Einrichten eines Standard Remote Hosts aufzurufen.Although intended for connection-oriented protocols, BeginSend also works for connectionless protocols, provided that you first call the Connect or BeginConnect method to establish a default remote host. Wenn Sie ein verbindungsloses Protokoll verwenden und planen, Daten an mehrere verschiedene Hosts zu senden, sollten Sie BeginSendToverwenden.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. Es ist in Ordnung, BeginSendTo auch dann zu verwenden, wenn Sie einen Standard-Remote Host mit Connecteingerichtet haben.It is okay to use BeginSendTo even after you have established a default remote host with Connect. Sie können den Standard Remote Host auch vor dem Aufrufen von BeginSend ändern, indem Sie Connect oder BeginConnectaufrufen.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Bei Verbindungs losen Protokollen müssen Sie auch sicherstellen, dass die Größe des Puffers nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters überschreitet.With connectionless protocols, you must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. Wenn dies der Fall ist, wird das Datagramm nicht gesendet, und BeginSend löst eine SocketExceptionaus.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die Daten, die Sie senden, nicht weitergeleitet.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

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

state ist eine Instanziierung einer benutzerdefinierten Klasse.state is an instantiation of a user-defined class.

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.

Hinweis

Der Ausführungs Kontext (der Sicherheitskontext, der Benutzer, dessen Identität angenommen wurde, und der aufrufende Kontext) wird für die asynchronen Socket Methoden zwischengespeichert.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. Nach der ersten Verwendung eines bestimmten Kontexts (einer bestimmten asynchronen Socket Methode, einer bestimmten Socket Instanz und eines bestimmten Rückrufs) wird bei der nachfolgenden Verwendung dieses Kontexts eine Leistungsverbesserung angezeigt.After the first use of a particular context (a specific asynchronous Socket method, a specific Socket instance, and a specific callback), subsequent uses of that context will see a performance improvement.

Siehe auch

Gilt für: