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

Definición

Envía datos de forma asincrónica a un host remoto concreto.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

Parámetros

buffer
Byte[]

Matriz de tipo Byte que contiene los datos que se enviarán.An array of type Byte that contains the data to send.

offset
Int32 Int32 Int32 Int32

Posición de base cero en el parámetro buffer donde comienza el envío de datos.The zero-based position in buffer at which to begin sending data.

size
Int32 Int32 Int32 Int32

Número de bytes para enviar.The number of bytes to send.

socketFlags
SocketFlags SocketFlags SocketFlags SocketFlags

Combinación bit a bit de los valores de SocketFlags.A bitwise combination of the SocketFlags values.

remoteEP
EndPoint EndPoint EndPoint EndPoint

EndPoint que representa el dispositivo remoto.An EndPoint that represents the remote device.

state
Object Object Object Object

Objeto que contiene la información de estado para esta solicitud.An object that contains state information for this request.

Devoluciones

IAsyncResult que hace referencia al envío asincrónico.An IAsyncResult that references the asynchronous send.

Excepciones

buffer es null.buffer is null.

O bien-or- remoteEP es null.remoteEP is null.

Error al intentar acceder al socket.An error occurred when attempting to access the socket.

offset es menor que 0.offset is less than 0.

o bien-or- offset es mayor que la longitud de buffer.offset is greater than the length of buffer.

O bien-or- size es menor que 0.size is less than 0.

o bien-or- size es mayor que la longitud de buffer menos el valor del parámetro offset .size is greater than the length of buffer minus the value of the offset parameter.

Un llamador de la pila de llamadas no tiene permiso para la operación solicitada.A caller higher in the call stack does not have permission for the requested operation.

Ejemplos

El siguiente ejemplo de código envía datos de forma asincrónica al host remoto especificado.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

Comentarios

El BeginSendTo método inicia una operación de envío asincrónica en el host remoto especificado en el remoteEP parámetro.The BeginSendTo method starts an asynchronous send operation to the remote host specified in the remoteEP parameter. La llamada BeginSendTo al método ofrece la posibilidad de enviar datos dentro de un subproceso de ejecución independiente.Calling the BeginSendTo method gives you the ability to send data within a separate execution thread. Aunque está pensado para los protocolos sin BeginSendTo conexión, funciona con los protocolos sin conexión y orientados a la conexión.Although intended for connectionless protocols, BeginSendTo works with both connectionless and connection-oriented protocols.

Puede crear un método de devolución de llamada que implemente el AsyncCallback delegado y pasar su nombre BeginSendTo al método.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSendTo method. Para ello, como mínimo, el parámetro debe contener state el valor connected o default Socket que se usa para la comunicación.To do this, at the very minimum, your state parameter must contain the connected or default Socket being used for communication. Si la devolución de llamada necesita más información, puede crear una clase pequeña para contener Sockety la otra información necesaria.If your callback needs more information, you can create a small class to hold the Socket, and the other required information. Pase una instancia de esta clase al BeginSendTo método a través del state parámetro.Pass an instance of this class to the BeginSendTo method through the state parameter.

El método de devolución de llamada EndSendTo debe invocar el método.Your callback method should invoke the EndSendTo method. Cuando la aplicación llama BeginSendToa, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y EndSendTo se bloqueará hasta que Socket envíe el número de bytes solicitados o produzca una excepción.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. Si desea que el subproceso original se bloquee después de BeginSendTo llamar al método, WaitHandle.WaitOne use el método.If you want the original thread to block after you call the BeginSendTo method, use the WaitHandle.WaitOne method. Llame al método Set en T:System.Threading.ManualResetEvent en el método de devolución de llamada cuando desee que el subproceso original continúe ejecutándose.Call the Set method on a T:System.Threading.ManualResetEvent in the callback method when you want the original thread to continue executing. Para obtener información adicional sobre la escritura de métodos de devolución de llamada , vea Serialización de un delegado como método de devolución de llamada.For additional information about writing callback methods see Marshaling a Delegate as a Callback Method.

Si está utilizando un protocolo orientado a la conexión, debe llamar primero al Connect SocketException BeginConnect Acceptmétodo,, o BeginAccept , o BeginSendTo producirá una excepción.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. BeginSendToomitirá el remoteEP parámetro y enviará los datos EndPoint al establecido en Connectel BeginConnectmétodo Accept,, BeginAccept o.BeginSendTo will ignore the remoteEP parameter and send data to the EndPoint established in the Connect, BeginConnect, Accept, or BeginAccept method.

Si utiliza un protocolo sin conexión, no es necesario establecer un host remoto predeterminado con el Connect método o BeginConnect antes de llamar SendToa.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. Solo tiene que hacer esto si va a llamar al BeginSend método.You only need to do this if you intend to call the BeginSend method. Si llama al Connect método o BeginConnect antes de llamar SendToa, el remoteEP parámetro invalidará el host remoto predeterminado especificado para esa operación de envío.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. Tampoco es necesario llamar Bind al método.You are also not required to call the Bind method. En este caso, el proveedor de servicios subyacente asignará la dirección de red local y el número de puerto más apropiados.In this case, the underlying service provider will assign the most appropriate local network address and port number. Use un número de puerto de cero si desea que el proveedor de servicios subyacente Seleccione un puerto libre.Use a port number of zero if you want the underlying service provider to select a free port. Si necesita identificar la dirección de red local asignada y el número de puerto, puede utilizar LocalEndPoint la propiedad después EndSendTo de que el método se complete correctamente.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.

Si desea enviar datos a una dirección de difusión, primero debe llamar al SetSocketOption método y establecer la opción de socket en. SocketOptionName.BroadcastIf you want to send data to a broadcast address, you must first call the SetSocketOption method and set the socket option to SocketOptionName.Broadcast. -También debe asegurarse de que el tamaño del búfer no supera el tamaño de paquete máximo del proveedor de servicios subyacente.-You must also be sure that the size of your buffer does not exceed the maximum packet size of the underlying service provider. Si lo hace, no se enviará el datagrama y EndSendTo producirá una SocketExceptionexcepción.If it does, the datagram will not be sent and EndSendTo will throw a SocketException.

Si especifica la DontRoute marca socketflags como parámetro, los datos que envía no se enrutarán.If you specify the DontRoute flag as the socketflags parameter, the data you are sending will not be routed.

Nota

Si recibe un SocketException, utilice la SocketException.ErrorCode propiedad para obtener el código de error específico.If you receive a SocketException, use the SocketException.ErrorCode property to obtain the specific error code. Después de obtener este código, consulte la documentación del código de error de la API de Windows Sockets versión 2 para obtener una descripción detallada del error.After you have obtained this code, refer to the Windows Sockets version 2 API error code documentation for a detailed description of the error.

Nota

Este miembro genera información de seguimiento cuando se habilita el seguimiento de red en la aplicación.This member outputs trace information when you enable network tracing in your application. Para obtener más información, consulte seguimiento de red en el .NET Framework.For more information, see Network Tracing in the .NET Framework.

Nota

El contexto de ejecución (el contexto de seguridad, el usuario suplantado y el contexto de llamada) se almacena en caché Socket para los métodos asincrónicos.The execution context (the security context, the impersonated user, and the calling context) is cached for the asynchronous Socket methods. Después del primer uso de un contexto determinado (un Socket método asincrónico concreto, una instancia específica Socket y una devolución de llamada específica), los usos posteriores de ese contexto verán una mejora del rendimiento.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.

Se aplica a

Consulte también: