(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Socket.BeginSend-Methode (IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)

Sendet Daten asynchron an einen verbundenen Socket.

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

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public IAsyncResult BeginSend(
	IList<ArraySegment<byte>> buffers,
	SocketFlags socketFlags,
	AsyncCallback callback,
	Object state
)

Parameter

buffers
Typ: System.Collections.Generic.IList<ArraySegment<Byte>>
Ein Array vom Typ Byte, das die zu sendenden Daten enthält.
socketFlags
Typ: System.Net.Sockets.SocketFlags
Eine bitweise Kombination der SocketFlags-Werte.
callback
Typ: System.AsyncCallback
Der AsyncCallback-Delegat.
state
Typ: System.Object
Ein Objekt mit Zustandsinformationen für diese Anforderung.

Rückgabewert

Typ: System.IAsyncResult
Ein IAsyncResult, das auf den asynchronen Sendevorgang verweist.

AusnahmeBedingung
ArgumentNullException

buffers ist null.

ArgumentException

buffers ist leer.

SocketException

Fehler beim Zugriff auf den Socket. Weitere Informationen finden Sie unten im Abschnitt Hinweise.

ObjectDisposedException

Der Socket wurde geschlossen.

Die BeginSend-Methode beginnt einen asynchronen Sendevorgang zum Remotehost, der in einer der folgenden Methoden eingerichtet wurde: Connect, BeginConnect, Accept oder BeginAccept. BeginSend löst eine Ausnahme aus, wenn Sie nicht zuerst Accept, BeginAccept, Connect oder BeginConnect aufrufen. Mit einem Aufruf der BeginSend-Methode können Sie Daten in einem eigenen Ausführungsthread senden.

Sie können eine Rückrufmethode erstellen, die den AsyncCallback-Delegaten implementiert, und den Namen an die BeginSend-Methode übergeben. Dafür muss der state-Parameter mindestens den verbundenen oder den Standard-Socket enthalten, der für die Kommunikation verwendet wird. Wenn für den Rückruf mehr Informationen benötigt werden, können Sie eine kleine Klasse oder Struktur erstellen, die die Socket-Informationen und die weiteren erforderlichen Informationen enthält. Übergeben Sie eine Instanz dieser Klasse über den state-Parameter an die BeginSend-Methode.

Die Rückrufmethode muss die EndSend-Methode aufrufen. Bei einem Aufruf von BeginSend verwendet das System einen separaten Thread zum Ausführen der angegebenen Rückrufmethode und blockiert EndSend, bis der Socket die angeforderte Anzahl von Bytes sendet oder eine Ausnahme auslöst. Wenn der ursprüngliche Thread nach dem Aufruf der BeginSend-Methode blockieren soll, verwenden Sie die WaitHandle.WaitOne-Methode. Rufen Sie in der Rückrufmethode die Set-Methode für ein T:System.Threading.ManualResetEvent auf, wenn der ursprüngliche Thread weiter ausgeführt werden soll. Weitere Informationen über das Verfassen von Rückrufmethoden finden Sie unter Beispiel zu Callbacks.

Obwohl BeginSend in erster Linie für verbindungsorientierte Protokolle konzipiert ist, ist die Verwendung auch bei verbindungslosen Protokollen möglich. In diesem Fall muss jedoch zuerst durch einen Aufruf der Connect-Methode oder der BeginConnect-Methode ein Standardremotehost eingerichtet werden. Wenn Sie ein verbindungsloses Protokoll verwenden und Daten an mehrere verschiedene Hosts senden möchten, empfiehlt sich die Verwendung von BeginSendTo. Sie können BeginSendTo auch dann noch verwenden, wenn Sie mit Connect einen Standardremotehost eingerichtet haben. Sie können außerdem vor dem Aufruf von BeginSend den Standardremotehost ändern, indem Sie Connect oder BeginConnect erneut aufrufen. Bei verbindungslosen Protokollen müssen Sie außerdem sicherstellen, dass die Größe des Puffers nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters übersteigt. Andernfalls wird das Datagramm nicht gesendet, und BeginSend löst eine SocketException aus.

Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die gesendeten Daten nicht weitergeleitet.

HinweisHinweis

Wenn Sie eine SocketException erhalten, können Sie mit der SocketException.ErrorCode-Eigenschaft den spezifischen Fehlercode abrufen. Nachdem Sie diesen Code abgerufen haben, finden Sie in der Dokumentation der MSDN Library zu API-Fehlercodes unter Windows Sockets, Version 2, eine ausführliche Beschreibung des Fehlers.

HinweisHinweis

Alle von einem bestimmten Thread initiierten Ein- und Ausgaben werden beim Beenden des Threads abgebrochen. Bei einem ausstehenden asynchronen Vorgang kann ein Fehler auftreten, wenn der Thread vor Abschluss des Vorgangs beendet wird.

HinweisHinweis

state ist eine Instanziierung einer benutzerdefinierten Klasse.

HinweisHinweis

Der erfolgreiche Abschluss eines Sendevorgangs bedeutet nicht, dass die Daten erfolgreich übermittelt wurden. Wenn im Transportsystem für die übertragenen Daten kein Speicher im Puffer verfügbar ist, wird der Sendevorgang blockiert, es sei denn, der Socket wurde in den nicht blockierenden Modus versetzt.

HinweisHinweis

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

HinweisHinweis

Der Ausführungskontext (der Sicherheitskontext, der Benutzer, dessen Identität verwendet wird, und der Kontext des Aufrufs) wird für die asynchrone Socket-Methode zwischengespeichert. Nach der ersten Verwendung eines bestimmten Kontexts (eine bestimmte asynchrone Socket-Methode, eine bestimmte Socket-Instanz und ein bestimmter Rückruf) führen weitere Verwendungen zu einer besseren Leistung.

HinweisHinweis

Das HostProtectionAttribute -Attribut, das auf diesen Typ oder Member angewendet wird, besitzt den folgenden Resources Eigenschaftswert: ExternalThreading. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder einer URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter HostProtectionAttribute -Klasse oder SQL Server-Programmierung und Hostschutzattribute.

.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft