Socket.BeginSendTo-Methode
Sendet Daten asynchron an einen bestimmten Remotehost.
Namespace: System.Net.Sockets
Assembly: System (in system.dll)
Syntax
'Declaration
Public Function BeginSendTo ( _
buffer As Byte(), _
offset As Integer, _
size As Integer, _
socketFlags As SocketFlags, _
remoteEP As EndPoint, _
callback As AsyncCallback, _
state As Object _
) As IAsyncResult
'Usage
Dim instance As Socket
Dim buffer As Byte()
Dim offset As Integer
Dim size As Integer
Dim socketFlags As SocketFlags
Dim remoteEP As EndPoint
Dim callback As AsyncCallback
Dim state As Object
Dim returnValue As IAsyncResult
returnValue = instance.BeginSendTo(buffer, offset, size, socketFlags, remoteEP, callback, state)
public IAsyncResult BeginSendTo (
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
EndPoint remoteEP,
AsyncCallback callback,
Object state
)
public:
IAsyncResult^ BeginSendTo (
array<unsigned char>^ buffer,
int offset,
int size,
SocketFlags socketFlags,
EndPoint^ remoteEP,
AsyncCallback^ callback,
Object^ state
)
public IAsyncResult BeginSendTo (
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
EndPoint remoteEP,
AsyncCallback callback,
Object state
)
public function BeginSendTo (
buffer : byte[],
offset : int,
size : int,
socketFlags : SocketFlags,
remoteEP : EndPoint,
callback : AsyncCallback,
state : Object
) : IAsyncResult
Parameter
- buffer
Ein Array vom Typ Byte, das die zu sendenden Daten enthält.
- offset
Die nullbasierte Position im buffer, an der mit dem Senden der Daten begonnen werden soll.
- size
Die Anzahl der zu sendenden Bytes.
- socketFlags
Eine bitweise Kombination der SocketFlags-Werte.
- remoteEP
Ein EndPoint, der das Remotegerät darstellt.
- callback
Der AsyncCallback-Delegat.
- state
Ein Objekt mit Zustandsinformationen für diese Anforderung.
Rückgabewert
Ein IAsyncResult, das auf den asynchronen Sendevorgang verweist.
Ausnahmen
Ausnahmetyp | Bedingung |
---|---|
buffer ist NULL (Nothing in Visual Basic). – oder – remoteEP ist NULL (Nothing in Visual Basic). |
|
Fehler beim Zugriff auf den Socket. Weitere Informationen finden Sie im Abschnitt "Hinweise". |
|
offset ist kleiner als 0 (null). – oder – offset ist größer als die Länge von buffer. – oder – size ist kleiner als 0 (null). – oder – size ist größer als die Länge von buffer minus dem Wert des offset-Parameters. |
|
Der Socket wurde geschlossen. |
|
Ein in der Aufrufliste übergeordneter Aufrufer hat keine Berechtigung für den angeforderten Vorgang. |
Hinweise
Die BeginSendTo-Methode beginnt einen asynchronen Sendevorgang an den im remoteEP-Parameter angegebenen Remotehost. Mit einem Aufruf der BeginSendTo-Methode können Sie Daten in einem eigenen Ausführungsthread senden. Obwohl BeginSendTo in erster Linie für verbindungslose Protokolle konzipiert ist, ist eine Verwendung sowohl bei verbindungslosen als auch bei verbindungsorientierten Protokollen möglich.
Sie können eine Rückrufmethode erstellen, die den AsyncCallback-Delegaten implementiert, und den Namen an die BeginSendTo-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 einen Rückruf mehr Informationen benötigt werden, können Sie eine kleine Klasse erzeugen, die den Socket und die weiteren erforderlichen Informationen enthält. Übergeben Sie eine Instanz dieser Klasse über den state-Parameter an die BeginSendTo-Methode.
Die Rückrufmethode muss die EndSendTo-Methode aufrufen. Bei einem Aufruf von BeginSendTo verwendet das System einen eigenen Thread zum Ausführen der angegebenen Rückrufmethode und blockiert EndSendTo, bis der Socket die angeforderte Anzahl von Bytes sendet oder eine Ausnahme auslöst. Wenn der ursprüngliche Thread blockiert werden soll, nachdem die BeginSendTo-Methode aufgerufen wurde, 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.
Wenn Sie ein verbindungsorientiertes Protokoll verwenden, müssen Sie zunächst die Methoden Connect, BeginConnect, Accept oder BeginAccept aufrufen. Andernfalls löst BeginSendTo eine SocketException aus. BeginSendTo ignoriert den remoteEP-Parameter und sendet Daten an den EndPoint, der mit der Connect-Methode, der BeginConnect-Methode, der Accept-Methode oder der BeginAccept-Methode festgelegt wurde.
Bei verbindungslosen Protokollen muss kein Standardremotehost mit der Connect-Methode oder der BeginConnect-Methode eingerichtet werden, bevor Sie SendTo aufrufen. Dies ist nur erforderlich, wenn Sie die BeginSend-Methode aufrufen möchten. Wenn Sie die Connect-Methode oder die BeginConnect-Methode vor dem Aufruf von SendTo aufrufen, überschreibt der remoteEP-Parameter den angegebenen Standardremotehost nur für diesen Sendevorgang. Auch der Aufruf der Bind-Methode ist nicht erforderlich. In diesem Fall weist der zugrunde liegende Dienstanbieter die am besten geeignete lokale Netzwerkadresse und Anschlussnummer zu. Verwenden Sie die Anschlussnummer 0 (null), wenn der zugrunde liegende Dienstanbieter einen freien Anschluss auswählen soll. Verwenden Sie nach dem erfolgreichen Abschluss der EndSendTo-Methode die LocalEndPoint-Eigenschaft zum Identifizieren der zugewiesenen lokalen Netzwerkadresse und Anschlussnummer.
Um Daten an eine Broadcastadresse zu senden, müssen Sie zuerst die SetSocketOption-Methode aufrufen und die Socketoption auf SocketOptionName.Broadcast festlegen. Außerdem müssen Sie sicherstellen, dass die Größe des Puffers die maximale Paketgröße des zugrunde liegenden Dienstanbieters nicht übersteigt. Andernfalls wird das Datagramm nicht gesendet, und EndSendTo löst eine SocketException aus.
Wenn Sie das DontRoute-Flag als socketflags-Parameter angeben, werden die gesendeten Daten nicht weitergeleitet.
Hinweis
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.
Hinweis
Dieser Member gibt Ablaufverfolgungsinformationen aus, wenn Sie die Netzwerkablaufverfolgung in der Anwendung aktivieren. Weitere Informationen finden Sie unter Netzwerkablaufverfolgung.
Hinweis
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.
Beispiel
Im folgenden Codebeispiel werden Daten asynchron an den angegebenen Remotehost gesendet.
Dim lipa As IPHostEntry = Dns.Resolve("host.contoso.com")
Dim lep As New IPEndPoint(lipa.AddressList(0), 11000)
Dim s As New Socket(lep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp)
Try
While True
allDone.Reset()
Dim buff As Byte() = Encoding.ASCII.GetBytes("This is a test")
Console.WriteLine("Sending Message Now..")
s.BeginSendTo(buff, 0, buff.Length, 0, lep, New AsyncCallback(AddressOf Async_Send_Receive.SendTo_Callback), s)
allDone.WaitOne()
End While
Catch e As Exception
Console.WriteLine(e.ToString())
End Try
End Sub 'SendTo
IPHostEntry lipa = Dns.Resolve("host.contoso.com");
IPEndPoint lep = new IPEndPoint(lipa.AddressList[0], 11000);
Socket s = new Socket(lep.Address.AddressFamily,
SocketType.Stream,
ProtocolType.Tcp);
try{
while(true){
allDone.Reset();
byte[] buff = Encoding.ASCII.GetBytes("This is a test");
Console.WriteLine("Sending Message Now..");
s.BeginSendTo(buff, 0, buff.Length, 0, lep, new AsyncCallback(Async_Send_Receive.SendTo_Callback), s);
allDone.WaitOne();
}
}
catch (Exception e){
Console.WriteLine(e.ToString());
}
IPHostEntry^ lipa = Dns::Resolve( "host.contoso.com" );
IPEndPoint^ lep = gcnew IPEndPoint( lipa->AddressList[ 0 ], 11000 );
Socket^ s = gcnew Socket( lep->Address->AddressFamily,
SocketType::Stream,
ProtocolType::Tcp );
try
{
while ( true )
{
allDone->Reset();
array<Byte>^ buff = Encoding::ASCII->GetBytes( "This is a test" );
Console::WriteLine( "Sending Message Now.." );
s->BeginSendTo( buff, 0, buff->Length, SocketFlags::None, lep,
gcnew AsyncCallback( &Async_Send_Receive::Connect_Callback ), s );
allDone->WaitOne();
}
}
catch ( Exception^ e )
{
Console::WriteLine( e );
}
IPHostEntry lipa = Dns.Resolve("host.contoso.com");
IPEndPoint lep = new IPEndPoint(lipa.get_AddressList()[0], 11000);
Socket s = new Socket(lep.get_Address().get_AddressFamily(),
SocketType.Stream, ProtocolType.Tcp);
try {
while (true) {
allDone.Reset();
ubyte buff[] = Encoding.get_ASCII().GetBytes("This is a test");
Console.WriteLine("Sending Message Now..");
s.BeginSendTo(buff, 0, buff.length, (SocketFlags)0, lep,
new AsyncCallback(Async_Send_Receive.SendTo_Callback), s);
allDone.WaitOne();
}
}
catch (System.Exception e) {
Console.WriteLine(e.ToString());
}
Plattformen
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0
Siehe auch
Referenz
Socket-Klasse
Socket-Member
System.Net.Sockets-Namespace
EndSendTo
AsyncCallback
Connect
LocalEndPoint
Broadcast
SetSocketOption