Socket.BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) Methode

Definition

Sendet asynchron Daten an einen angegebenen Remotehost.Sends data asynchronously to a specific remote host.

public:
 IAsyncResult ^ BeginSendTo(cli::array <System::Byte> ^ buffer, int offset, int size, System::Net::Sockets::SocketFlags socket_flags, System::Net::EndPoint ^ remote_end, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginSendTo (byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socket_flags, System.Net.EndPoint remote_end, AsyncCallback callback, object state);
member this.BeginSendTo : byte[] * int * int * System.Net.Sockets.SocketFlags * System.Net.EndPoint * AsyncCallback * obj -> IAsyncResult
Public Function BeginSendTo (buffer As Byte(), offset As Integer, size As Integer, socket_flags As SocketFlags, remote_end As EndPoint, 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, an der mit dem Senden der Daten begonnen werden soll.The zero-based position in buffer 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.

remoteEP
EndPoint

Ein EndPoint, der das Remotegerät darstellt.An EndPoint that represents the remote device.

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.

- oder --or- remoteEP ist null.remoteEP is null.

Fehler beim Versuch, auf den Socket zuzugreifen.An error occurred when attempting to access the socket.

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

- oder --or- offset ist größer als die Länge von buffer.offset is greater 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.

Ein höher in der Aufrufliste befindlicher Aufrufer verfügt nicht über die Berechtigung für den angeforderten Vorgang.A caller higher in the call stack does not have permission for the requested operation.

Beispiele

Im folgenden Codebeispiel werden Daten asynchron an den angegebenen Remote Host gesendet.The following code example asynchronously sends data to the specified remote host.

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

Hinweise

Die BeginSendTo-Methode startet einen asynchronen Sendevorgang an den im remoteEP-Parameter angegebenen Remote Host.The BeginSendTo method starts an asynchronous send operation to the remote host specified in the remoteEP parameter. Wenn Sie die BeginSendTo-Methode aufrufen, haben Sie die Möglichkeit, Daten in einem separaten Ausführungs Thread zu senden.Calling the BeginSendTo method gives you the ability to send data within a separate execution thread. Obwohl BeginSendTo für verbindungslose Protokolle vorgesehen ist, funktioniert sowohl mit Verbindungs orientierten als auch mit Verbindungs orientierten Protokollen.Although intended for connectionless protocols, BeginSendTo works with both connectionless and connection-oriented protocols.

Sie können eine Rückruf Methode erstellen, die den AsyncCallback Delegaten implementiert und seinen Namen an die BeginSendTo-Methode übergibt.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSendTo 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 erstellen, um die Socketund die anderen erforderlichen Informationen zu speichern.If your callback needs more information, you can create a small class to hold the Socket, and the other required information. Übergeben Sie mithilfe des state-Parameters eine Instanz dieser Klasse an die BeginSendTo-Methode.Pass an instance of this class to the BeginSendTo method through the state parameter.

Die Rückruf Methode sollte die EndSendTo-Methode aufrufen.Your callback method should invoke the EndSendTo method. Wenn die Anwendung BeginSendToaufruft, verwendet das System einen separaten Thread, um die angegebene Rückruf Methode auszuführen, und blockiert EndSendTo, bis der Socket die Anzahl der angeforderten Bytes sendet oder eine Ausnahme auslöst.When your application calls BeginSendTo, the system will use a separate thread to execute the specified callback method, and will block on EndSendTo 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 BeginSendTo-Methode aufgerufen haben, verwenden Sie die WaitHandle.WaitOne-Methode.If you want the original thread to block after you call the BeginSendTo 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 about writing callback methods see Marshaling a Delegate as a Callback Method.

Wenn Sie ein Verbindungs orientiertes Protokoll verwenden, müssen Sie zuerst die Methode Connect, BeginConnect, Acceptoder BeginAccept oder BeginSendTo einen SocketExceptionauslösen.If you are using a connection-oriented protocol, you must first call the Connect, BeginConnect, Accept, or BeginAccept method, or BeginSendTo will throw a SocketException. BeginSendTo ignoriert den remoteEP Parameter und sendet Daten an die EndPoint, die in der Connect-, BeginConnect-, Accept-oder BeginAccept-Methode festgelegt sind.BeginSendTo will ignore the remoteEP parameter and send data to the EndPoint established in the Connect, BeginConnect, Accept, or BeginAccept method.

Wenn Sie ein verbindungsloses Protokoll verwenden, müssen Sie vor dem Aufrufen von SendTokeinen Standard-Remote Host mit der Connect-oder BeginConnect-Methode einrichten.If you are using a connectionless protocol, you do not need to establish a default remote host with the Connect or BeginConnect method prior to calling SendTo. Dies ist nur erforderlich, wenn Sie beabsichtigen, die BeginSend-Methode aufzurufen.You only need to do this if you intend to call the BeginSend method. Wenn Sie die Connect-oder BeginConnect-Methode aufrufen, bevor Sie SendToaufrufen, überschreibt der remoteEP-Parameter den angegebenen Standard Remote Host nur für diesen Sendevorgang.If you do call the Connect or BeginConnect method prior to calling SendTo, the remoteEP parameter will override the specified default remote host for that send operation only. Außerdem ist es nicht erforderlich, die Bind-Methode aufzurufen.You are also not required to call the Bind method. In diesem Fall weist der zugrunde liegende Dienstanbieter die am besten geeignete Adresse und Portnummer für das lokale Netzwerk zu.In this case, the underlying service provider will assign the most appropriate local network address and port number. Verwenden Sie die Portnummer 0 (null), wenn der zugrunde liegende Dienstanbieter einen freien Port auswählen soll.Use a port number of zero if you want the underlying service provider to select a free port. Wenn Sie die Adresse und die Portnummer des zugewiesenen lokalen Netzwerks identifizieren müssen, können Sie die LocalEndPoint-Eigenschaft verwenden, nachdem die EndSendTo-Methode erfolgreich abgeschlossen wurde.If you need to identify the assigned local network address and port number, you can use the LocalEndPoint property after the EndSendTo method successfully completes.

Wenn Sie Daten an eine Broadcast Adresse senden möchten, müssen Sie zuerst die SetSocketOption-Methode aufzurufen und die Socketoption auf SocketOptionName.Broadcastfestlegen.If you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. -Sie müssen auch sicherstellen, dass die Größe des Puffers nicht die maximale Paketgröße des zugrunde liegenden Dienstanbieters überschreitet.-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 EndSendTo löst eine SocketExceptionaus.If it does, the datagram will not be sent and EndSendTo 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

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.

Gilt für:

Siehe auch