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ónica al host remoto establecido en el Connectmétodo, BeginConnect, Accepto BeginAccept .The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSendproducirá una excepción si no se llama primero a Accept Connect, BeginAccept, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. La llamada BeginSend al método ofrece la posibilidad de enviar datos dentro de 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 implemente el AsyncCallback delegado y pasar su nombre BeginSend al 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 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 pequeña clase o estructura que contenga Socket y la 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. Pase una instancia de esta clase al BeginSend método a través del 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 EndSend debe invocar el método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSenda, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y EndSend se bloqueará hasta que Socket envíe el número de bytes solicitados o produzca 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 BeginSend llamar al método, WaitHandle.WaitOne use el 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 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 cómo escribir métodos de devolución de llamada , vea Serialización de un delegado como método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Aunque está pensado para los protocolos orientados BeginSend a la conexión, también funciona para los protocolos sin conexión, siempre Connect que BeginConnect llame primero al método o 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 utiliza un protocolo sin conexión y planea 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. Es correcto usar BeginSendTo incluso después de haber establecido un host remoto predeterminado con 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 BeginSend a realizando 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. Con los protocolos sin conexión, 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.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 lo hace, no se enviará el datagrama y BeginSend producirá una SocketExceptionexcepción.If it does, the datagram will not be sent and BeginSend 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

Todas las operaciones de e/s iniciadas por un subproceso determinado se cancelan cuando finaliza el subproceso.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 finaliza antes de que se complete la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

statees 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 han entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio en búfer disponible en el sistema de transporte para almacenar los datos que se van a transmitir, el envío se bloqueará a menos que el socket se haya colocado en 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 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.

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ónica al host remoto establecido en el Connectmétodo, BeginConnect, Accepto BeginAccept .The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSendproducirá una excepción si no se llama primero a Accept Connect, BeginAccept, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. La llamada BeginSend al método ofrece la posibilidad de enviar datos dentro de 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 implemente el AsyncCallback delegado y pasar su nombre BeginSend al 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 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 pequeña clase o estructura que contenga Socket y la 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. Pase una instancia de esta clase al BeginSend método a través del 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 EndSend debe invocar el método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSenda, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y EndSend se bloqueará hasta que Socket envíe el número de bytes solicitados o produzca 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 BeginSend llamar al método, WaitHandle.WaitOne use el 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 que el subproceso original continúe ejecutándose.Call the Set method on a ManualResetEvent in the callback method when you want the original thread to continue executing. Para obtener información adicional sobre cómo escribir métodos de devolución de llamada , vea Serialización de un delegado como método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Aunque está pensado para los protocolos orientados BeginSend a la conexión, también funciona para los protocolos sin conexión, siempre Connect que BeginConnect llame primero al método o 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 utiliza un protocolo sin conexión y planea 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. Es correcto usar BeginSendTo incluso después de haber establecido un host remoto predeterminado con 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 BeginSend a realizando 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. Con los protocolos sin conexión, 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.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 lo hace, no se enviará el datagrama y BeginSend producirá una SocketExceptionexcepción.If it does, the datagram will not be sent and BeginSend 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

Todas las operaciones de e/s iniciadas por un subproceso determinado se cancelan cuando finaliza el subproceso.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 finaliza antes de que se complete la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

statees 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 han entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio en búfer disponible en el sistema de transporte para almacenar los datos que se van a transmitir, el envío se bloqueará a menos que el socket se haya colocado en 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 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.

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ónica al host remoto establecido en el Connectmétodo, BeginConnect, Accepto BeginAccept .The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSendproducirá una excepción si no se llama primero a Accept Connect, BeginAccept, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. La llamada BeginSend al método ofrece la posibilidad de enviar datos dentro de 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 implemente el AsyncCallback delegado y pasar su nombre BeginSend al 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 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 pequeña clase o estructura que contenga Socket y la 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. Pase una instancia de esta clase al BeginSend método a través del 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 EndSend debe invocar el método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSenda, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y EndSend se bloqueará hasta que Socket envíe el número de bytes solicitados o produzca 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 BeginSend llamar al método, WaitHandle.WaitOne use el 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 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 cómo escribir métodos de devolución de llamada , vea Serialización de un delegado como método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Aunque está pensado para los protocolos orientados BeginSend a la conexión, también funciona para los protocolos sin conexión, siempre Connect que BeginConnect llame primero al método o 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 utiliza un protocolo sin conexión y planea 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. Es correcto usar BeginSendTo incluso después de haber establecido un host remoto predeterminado con 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 BeginSend a realizando 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. Con los protocolos sin conexión, 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.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 lo hace, no se enviará el datagrama y BeginSend producirá una SocketExceptionexcepción.If it does, the datagram will not be sent and BeginSend 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

Todas las operaciones de e/s iniciadas por un subproceso determinado se cancelan cuando finaliza el subproceso.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 finaliza antes de que se complete la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

statees 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 han entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio en búfer disponible en el sistema de transporte para almacenar los datos que se van a transmitir, el envío se bloqueará a menos que el socket se haya colocado en 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 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.

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

En el ejemplo de código siguiente se comienza a enviar datos de forma asincrónica a un host remoto.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ónica al host remoto establecido en el Connectmétodo, BeginConnect, Accepto BeginAccept .The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSendproducirá una excepción si no se llama primero a Accept Connect, BeginAccept, o BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. La llamada BeginSend al método ofrece la posibilidad de enviar datos dentro de 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 implemente el AsyncCallback delegado y pasar su nombre BeginSend al 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 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 pequeña clase o estructura que contenga Socket y la 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. Pase una instancia de esta clase al BeginSend método a través del 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 EndSend debe invocar el método.Your callback method should invoke the EndSend method. Cuando la aplicación llama BeginSenda, el sistema usará un subproceso independiente para ejecutar el método de devolución de llamada especificado y EndSend se bloqueará hasta que Socket envíe el número de bytes solicitados o produzca 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 BeginSend llamar al método, WaitHandle.WaitOne use el 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 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 cómo escribir métodos de devolución de llamada , vea Serialización de un delegado como método de devolución de llamada.For additional information on writing callback methods see Marshaling a Delegate as a Callback Method.

Aunque está pensado para los protocolos orientados BeginSend a la conexión, también funciona para los protocolos sin conexión, siempre Connect que BeginConnect llame primero al método o 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 utiliza un protocolo sin conexión y planea 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. Es correcto usar BeginSendTo incluso después de haber establecido un host remoto predeterminado con 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 BeginSend a realizando 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. Con los protocolos sin conexión, 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.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 lo hace, no se enviará el datagrama y BeginSend producirá una SocketExceptionexcepción.If it does, the datagram will not be sent and BeginSend 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

Todas las operaciones de e/s iniciadas por un subproceso determinado se cancelan cuando finaliza el subproceso.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 finaliza antes de que se complete la operación.A pending asynchronous operation can fail if the thread exits before the operation completes.

Nota

statees 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 han entregado correctamente.The successful completion of a send does not indicate that the data was successfully delivered. Si no hay espacio en búfer disponible en el sistema de transporte para almacenar los datos que se van a transmitir, el envío se bloqueará a menos que el socket se haya colocado en 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 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.

Consulte también:

Se aplica a