Socket.BeginSend Socket.BeginSend Socket.BeginSend Socket.BeginSend Method

Definición

Envía datos asincrónicamente a un objeto Socket conectado.Sends data asynchronously to a connected Socket.

Sobrecargas

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

Envía datos asincrónicamente a un objeto Socket conectado.Sends data asynchronously to a connected Socket.

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

Envía datos asincrónicamente a un objeto Socket conectado.Sends data asynchronously to a connected Socket.

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

Envía datos asincrónicamente a un objeto Socket conectado.Sends data asynchronously to a connected Socket.

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

Envía datos asincrónicamente a un objeto Socket conectado.Sends data asynchronously to a connected Socket.

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

Envía datos asincrónicamente a un objeto Socket conectado.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

Parámetros

buffers
IList<ArraySegment<Byte>>

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

socketFlags
SocketFlags SocketFlags SocketFlags SocketFlags

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

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

Error al intentar acceder al socket.An error occurred when attempting to access the socket. Vea la sección de comentarios que figura más abajo.See remarks section below.

Comentarios

El BeginSend método inicia una operación de envío asincrónico para el host remoto establecido en el Connect, BeginConnect, Accept, o BeginAccept método.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend se iniciará una excepción si no se llama primero Accept, BeginAccept, Connect, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Una llamada a la BeginSend método le permite enviar datos en un subproceso de ejecución independiente.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Puede crear un método de devolución de llamada que implementa el AsyncCallback y pasar su nombre a la BeginSend método.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Para ello, como mínimo, el state parámetro debe contener conectado o default Socket utilizado 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 pequeña clase o estructura que contenga el Socket y otra información necesaria.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Pasar una instancia de esta clase a la BeginSend método a través de la state parámetro.Pass an instance of this class to the BeginSend method through the state parameter.

El método de devolución de llamada debe invocar el EndSend método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSend, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y se bloqueará en EndSend hasta que el Socket envía el número de bytes solicitado o una excepción.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. Si desea que el subproceso original se bloquee después de llamar a la BeginSend método, use el WaitHandle.WaitOne método.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Llame al método Set en un ManualResetEvent en el método de devolución de llamada cuando desee seguir ejecutando el subproceso original.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 más información sobre cómo escribir métodos de devolución de llamada vea serialización de un delegado como un método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Si bien pensado para protocolos orientados a conexiones, BeginSend también funciona para los protocolos sin conexión, siempre que se llama primero a la Connect o BeginConnect método para establecer un host remoto predeterminado.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. Si usa un protocolo sin conexión y un plan para enviar datos a varios hosts diferentes, debe usar BeginSendTo.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. No pasa nada por usar BeginSendTo incluso después de haber establecido un host remoto predeterminado mediante Connect.It is okay to use BeginSendTo even after you have established a default remote host with Connect. También puede cambiar el host remoto predeterminado antes de llamar a BeginSend mediante otra llamada a Connect o BeginConnect.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Protocolos sin conexión, también debe ser seguro de que el tamaño del búfer no supera el tamaño máximo de paquetes del proveedor de servicios subyacente.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. Si es así, no se enviará el datagrama y BeginSend producirá un SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la DontRoute marca como el socketflags parámetro, los datos que se 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 el 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 haber obtenido este código, consulte el código de error de API de la versión 2 de Windows Sockets documentación 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

Todas las E/S iniciada por un subproceso dado se cancela cuando ese subproceso termina.All I/O initiated by a given thread is canceled when that thread exits. Una operación asincrónica pendiente puede producir un error si el subproceso se cierra antes de que finalice la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

state es una instancia de una clase definida por el usuario.state is an instantiation of a user-defined class.

Nota

La finalización correcta de un envío no indica que los datos se ha entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio de búfer disponible dentro del sistema de transporte para contener los datos que se transmitan, envío bloqueará a menos que el socket se ha colocado en el modo de no bloqueo.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.

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 .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é asincrónica Socket métodos.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 determinado asincrónico Socket método, un determinado Socket instancia 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.

Consulte también:

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

Importante

Esta API no es conforme a CLS.

Envía datos asincrónicamente a un objeto Socket conectado.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 *  * AsyncCallback * obj -> IAsyncResult

Parámetros

buffers
IList<ArraySegment<Byte>>

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

socketFlags
SocketFlags SocketFlags SocketFlags SocketFlags

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

errorCode
SocketError SocketError SocketError SocketError

Objeto SocketError que almacena el error de socket.A SocketError object that stores the socket error.

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

Error al intentar acceder al socket.An error occurred when attempting to access the socket. Vea la sección de comentarios que figura más abajo.See remarks section below.

Comentarios

El BeginSend método inicia una operación de envío asincrónico para el host remoto establecido en el Connect, BeginConnect, Accept, o BeginAccept método.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend se iniciará una excepción si no se llama primero Accept, BeginAccept, Connect, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Una llamada a la BeginSend método le permite enviar datos en un subproceso de ejecución independiente.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Puede crear un método de devolución de llamada que implementa el AsyncCallback y pasar su nombre a la BeginSend método.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Para ello, como mínimo, el state parámetro debe contener conectado o default Socket utilizado 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 pequeña clase o estructura que contenga el Socket y otra información necesaria.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Pasar una instancia de esta clase a la BeginSend método a través de la state parámetro.Pass an instance of this class to the BeginSend method through the state parameter.

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

Si bien pensado para protocolos orientados a conexiones, BeginSend también funciona para los protocolos sin conexión, siempre que se llama primero a la Connect o BeginConnect método para establecer un host remoto predeterminado.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. Si usa un protocolo sin conexión y un plan para enviar datos a varios hosts diferentes, debe usar BeginSendTo.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. No pasa nada por usar BeginSendTo incluso después de haber establecido un host remoto predeterminado mediante Connect.It is okay to use BeginSendTo even after you have established a default remote host with Connect. También puede cambiar el host remoto predeterminado antes de llamar a BeginSend mediante otra llamada a Connect o BeginConnect.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Protocolos sin conexión, también debe ser seguro de que el tamaño del búfer no supera el tamaño máximo de paquetes del proveedor de servicios subyacente.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. Si es así, no se enviará el datagrama y BeginSend producirá un SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la DontRoute marca como el socketflags parámetro, los datos que se 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 el 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 haber obtenido este código, consulte el código de error de API de la versión 2 de Windows Sockets documentación 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

Todas las E/S iniciada por un subproceso dado se cancela cuando ese subproceso termina.All I/O initiated by a given thread is canceled when that thread exits. Una operación asincrónica pendiente puede producir un error si el subproceso se cierra antes de que finalice la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

state es una instancia de una clase definida por el usuario.state is an instantiation of a user-defined class.

Nota

La finalización correcta de un envío no indica que los datos se ha entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio de búfer disponible dentro del sistema de transporte para contener los datos que se transmitan, envío bloqueará a menos que el socket se ha colocado en el modo de no bloqueo.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.

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 .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é asincrónica Socket métodos.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 determinado asincrónico Socket método, un determinado Socket instancia 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.

Consulte también:

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

Envía datos asincrónicamente a un objeto Socket conectado.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 *  * AsyncCallback * obj -> 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 del parámetro buffer donde se empezará a enviar los datos.The zero-based position in the buffer parameter 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.

errorCode
SocketError SocketError SocketError SocketError

Objeto SocketError que almacena el error de socket.A SocketError object that stores the socket error.

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

Error al intentar acceder al socket.An error occurred when attempting to access the socket. Vea la sección de comentarios que figura más abajo.See remarks section below.

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

O bien-or- offset es menor que la longitud de buffer.offset is less 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.

Comentarios

El BeginSend método inicia una operación de envío asincrónico para el host remoto establecido en el Connect, BeginConnect, Accept, o BeginAccept método.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend se iniciará una excepción si no se llama primero Accept, BeginAccept, Connect, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Una llamada a la BeginSend método le permite enviar datos en un subproceso de ejecución independiente.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Puede crear un método de devolución de llamada que implementa el AsyncCallback y pasar su nombre a la BeginSend método.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Para ello, como mínimo, el state parámetro debe contener conectado o default Socket utilizado 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 pequeña clase o estructura que contenga el Socket y otra información necesaria.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Pasar una instancia de esta clase a la BeginSend método a través de la state parámetro.Pass an instance of this class to the BeginSend method through the state parameter.

El método de devolución de llamada debe invocar el EndSend método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSend, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y se bloqueará en EndSend hasta que el Socket envía el número de bytes solicitado o una excepción.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. Si desea que el subproceso original se bloquee después de llamar a la BeginSend método, use el WaitHandle.WaitOne método.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Llame al método Set en un ManualResetEvent en el método de devolución de llamada cuando desee seguir ejecutando el subproceso original.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 más información sobre cómo escribir métodos de devolución de llamada vea serialización de un delegado como un método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Si bien pensado para protocolos orientados a conexiones, BeginSend también funciona para los protocolos sin conexión, siempre que se llama primero a la Connect o BeginConnect método para establecer un host remoto predeterminado.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. Si usa un protocolo sin conexión y un plan para enviar datos a varios hosts diferentes, debe usar BeginSendTo.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. No pasa nada por usar BeginSendTo incluso después de haber establecido un host remoto predeterminado mediante Connect.It is okay to use BeginSendTo even after you have established a default remote host with Connect. También puede cambiar el host remoto predeterminado antes de llamar a BeginSend mediante otra llamada a Connect o BeginConnect.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Protocolos sin conexión, también debe ser seguro de que el tamaño del búfer no supera el tamaño máximo de paquetes del proveedor de servicios subyacente.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. Si es así, no se enviará el datagrama y BeginSend producirá un SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la DontRoute marca como el socketflags parámetro, los datos que se 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 el 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 haber obtenido este código, consulte el código de error de API de la versión 2 de Windows Sockets documentación 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

Todas las E/S iniciada por un subproceso dado se cancela cuando ese subproceso termina.All I/O initiated by a given thread is canceled when that thread exits. Una operación asincrónica pendiente puede producir un error si el subproceso se cierra antes de que finalice la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

state es una instancia de una clase definida por el usuario.state is an instantiation of a user-defined class.

Nota

La finalización correcta de un envío no indica que los datos se ha entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio de búfer disponible dentro del sistema de transporte para contener los datos que se transmitan, envío bloqueará a menos que el socket se ha colocado en el modo de no bloqueo.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.

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 .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é asincrónica Socket métodos.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 determinado asincrónico Socket método, un determinado Socket instancia 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.

Consulte también:

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

Envía datos asincrónicamente a un objeto Socket conectado.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

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 del parámetro buffer donde se empezará a enviar los datos.The zero-based position in the buffer parameter 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.

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

Error al intentar acceder al socket.An error occurred when attempting to access the socket. Vea la sección de comentarios que figura más abajo.See remarks section below.

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

O bien-or- offset es menor que la longitud de buffer.offset is less 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.

Ejemplos

El siguiente ejemplo de código comienza a enviar datos a un host remoto de forma asincrónica.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 'Connect_Callback

Comentarios

El BeginSend método inicia una operación de envío asincrónico para el host remoto establecido en el Connect, BeginConnect, Accept, o BeginAccept método.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend se iniciará una excepción si no se llama primero Accept, BeginAccept, Connect, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Una llamada a la BeginSend método le permite enviar datos en un subproceso de ejecución independiente.Calling the BeginSend method gives you the ability to send data within a separate execution thread.

Puede crear un método de devolución de llamada que implementa el AsyncCallback y pasar su nombre a la BeginSend método.You can create a callback method that implements the AsyncCallback delegate and pass its name to the BeginSend method. Para ello, como mínimo, el state parámetro debe contener conectado o default Socket utilizado 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 pequeña clase o estructura que contenga el Socket y otra información necesaria.If your callback needs more information, you can create a small class or structure to hold the Socket and the other required information. Pasar una instancia de esta clase a la BeginSend método a través de la state parámetro.Pass an instance of this class to the BeginSend method through the state parameter.

El método de devolución de llamada debe invocar el EndSend método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSend, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y se bloqueará en EndSend hasta que el Socket envía el número de bytes solicitado o una excepción.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. Si desea que el subproceso original se bloquee después de llamar a la BeginSend método, use el WaitHandle.WaitOne método.If you want the original thread to block after you call the BeginSend method, use the WaitHandle.WaitOne method. Llame al método Set en un ManualResetEvent en el método de devolución de llamada cuando desee seguir ejecutando el subproceso original.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 más información sobre cómo escribir métodos de devolución de llamada vea serialización de un delegado como un método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Si bien pensado para protocolos orientados a conexiones, BeginSend también funciona para los protocolos sin conexión, siempre que se llama primero a la Connect o BeginConnect método para establecer un host remoto predeterminado.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. Si usa un protocolo sin conexión y un plan para enviar datos a varios hosts diferentes, debe usar BeginSendTo.If you are using a connectionless protocol and plan to send data to several different hosts, you should use BeginSendTo. No pasa nada por usar BeginSendTo incluso después de haber establecido un host remoto predeterminado mediante Connect.It is okay to use BeginSendTo even after you have established a default remote host with Connect. También puede cambiar el host remoto predeterminado antes de llamar a BeginSend mediante otra llamada a Connect o BeginConnect.You can also change the default remote host prior to calling BeginSend by making another call to Connect or BeginConnect. Protocolos sin conexión, también debe ser seguro de que el tamaño del búfer no supera el tamaño máximo de paquetes del proveedor de servicios subyacente.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. Si es así, no se enviará el datagrama y BeginSend producirá un SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la DontRoute marca como el socketflags parámetro, los datos que se 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 el 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 haber obtenido este código, consulte el código de error de API de la versión 2 de Windows Sockets documentación 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

Todas las E/S iniciada por un subproceso dado se cancela cuando ese subproceso termina.All I/O initiated by a given thread is canceled when that thread exits. Una operación asincrónica pendiente puede producir un error si el subproceso se cierra antes de que finalice la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

state es una instancia de una clase definida por el usuario.state is an instantiation of a user-defined class.

Nota

La finalización correcta de un envío no indica que los datos se ha entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio de búfer disponible dentro del sistema de transporte para contener los datos que se transmitan, envío bloqueará a menos que el socket se ha colocado en el modo de no bloqueo.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.

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 .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é asincrónica Socket métodos.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 determinado asincrónico Socket método, un determinado Socket instancia 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.

Consulte también:

Se aplica a