Socket.BeginSend Method

Definition

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

Overloads

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)

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)

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

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)

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
Public Function BeginSend (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

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

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

callback
AsyncCallback

Delegado AsyncCallback.The AsyncCallback delegate.

state
Object

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

Returns

IAsyncResult

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

Exceptions

buffers es null.buffers is null.

buffers está vacía.buffers is empty.

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.

El Socket se ha cerrado.The Socket has been closed.

Remarks

El método BeginSend inicia una operación de envío asincrónica al host remoto establecido en el método Connect, BeginConnect, Accepto BeginAccept.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend producirá una excepción si no se llama primero a Accept, BeginAccept, Connecto BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Llamar al método BeginSend le permite 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 delegado de AsyncCallback y pasar su nombre al método BeginSend.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 state debe contener los Socket conectados o predeterminados que se usan 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 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 método BeginSend a través del parámetro state.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 método EndSend.Your callback method should invoke the EndSend method. Cuando la aplicación llama a 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í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 llamar al método BeginSend, use el método WaitHandle.WaitOne.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 a la conexión, BeginSend también funciona para los protocolos sin conexión, siempre que llame primero al método Connect o BeginConnect 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 utilizar 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 a BeginSend 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 es así, no se enviará el datagrama y BeginSend producirá una SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la marca de DontRoute como parámetro socketflags, 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.

Note

Si recibe un SocketException, utilice la propiedad SocketException.ErrorCode 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.

Note

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.

Note

state es una creación de instancias de una clase definida por el usuario.state is an instantiation of a user-defined class.

Note

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.

Note

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.

Note

El contexto de ejecución (el contexto de seguridad, el usuario suplantado y el contexto de llamada) se almacena en la memoria caché para los métodos de Socket 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 método de Socket asincrónico específico, una instancia de Socket específica 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.

See also

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

Important

This API is not CLS-compliant.

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);
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);
[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 * SocketError * AsyncCallback * obj -> IAsyncResult
Public Function BeginSend (buffers As IList(Of ArraySegment(Of Byte)), socketFlags As SocketFlags, ByRef errorCode As SocketError, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

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

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

errorCode
SocketError

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

callback
AsyncCallback

Delegado AsyncCallback.The AsyncCallback delegate.

state
Object

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

Returns

IAsyncResult

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

Attributes

Exceptions

buffers es null.buffers is null.

buffers está vacía.buffers is empty.

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.

El Socket se ha cerrado.The Socket has been closed.

Remarks

El método BeginSend inicia una operación de envío asincrónica al host remoto establecido en el método Connect, BeginConnect, Accepto BeginAccept.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend producirá una excepción si no se llama primero a Accept, BeginAccept, Connecto BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Llamar al método BeginSend le permite 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 delegado de AsyncCallback y pasar su nombre al método BeginSend.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 state debe contener los Socket conectados o predeterminados que se usan 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 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 método BeginSend a través del parámetro state.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 método EndSend.Your callback method should invoke the EndSend method. Cuando la aplicación llama a 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í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 llamar al método BeginSend, use el método WaitHandle.WaitOne.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 a la conexión, BeginSend también funciona para los protocolos sin conexión, siempre que llame primero al método Connect o BeginConnect 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 utilizar 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 a BeginSend 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 es así, no se enviará el datagrama y BeginSend producirá una SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la marca de DontRoute como parámetro socketflags, 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.

Note

Si recibe un SocketException, utilice la propiedad SocketException.ErrorCode 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.

Note

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.

Note

state es una creación de instancias de una clase definida por el usuario.state is an instantiation of a user-defined class.

Note

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.

Note

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.

Note

El contexto de ejecución (el contexto de seguridad, el usuario suplantado y el contexto de llamada) se almacena en la memoria caché para los métodos de Socket 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 método de Socket asincrónico específico, una instancia de Socket específica 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.

See also

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 * SocketError * AsyncCallback * obj -> IAsyncResult
Public Function BeginSend (buffer As Byte(), offset As Integer, size As Integer, socketFlags As SocketFlags, ByRef errorCode As SocketError, callback As AsyncCallback, state As Object) As IAsyncResult

Parameters

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

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

El número de bytes que se deben enviar.The number of bytes to send.

socketFlags
SocketFlags

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

errorCode
SocketError

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

callback
AsyncCallback

Delegado AsyncCallback.The AsyncCallback delegate.

state
Object

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

Returns

IAsyncResult

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

Exceptions

buffer es null.buffer is null.

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.

El Socket se ha cerrado.The Socket has been closed.

Remarks

El método BeginSend inicia una operación de envío asincrónica al host remoto establecido en el método Connect, BeginConnect, Accepto BeginAccept.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend producirá una excepción si no se llama primero a Accept, BeginAccept, Connecto BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Llamar al método BeginSend le permite 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 delegado de AsyncCallback y pasar su nombre al método BeginSend.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 state debe contener los Socket conectados o predeterminados que se usan 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 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 método BeginSend a través del parámetro state.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 método EndSend.Your callback method should invoke the EndSend method. Cuando la aplicación llama a 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í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 llamar al método BeginSend, use el método WaitHandle.WaitOne.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 a la conexión, BeginSend también funciona para los protocolos sin conexión, siempre que llame primero al método Connect o BeginConnect 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 utilizar 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 a BeginSend 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 es así, no se enviará el datagrama y BeginSend producirá una SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la marca de DontRoute como parámetro socketflags, 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.

Note

Si recibe un SocketException, utilice la propiedad SocketException.ErrorCode 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.

Note

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.

Note

state es una creación de instancias de una clase definida por el usuario.state is an instantiation of a user-defined class.

Note

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.

Note

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.

Note

El contexto de ejecución (el contexto de seguridad, el usuario suplantado y el contexto de llamada) se almacena en la memoria caché para los métodos de Socket 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 método de Socket asincrónico específico, una instancia de Socket específica 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.

See also

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 socketFlags, AsyncCallback ^ callback, System::Object ^ state);
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 socketFlags, AsyncCallback callback, 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
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, socketFlags As SocketFlags, callback As AsyncCallback, state As Object) As 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

Parameters

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

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

El número de bytes que se deben enviar.The number of bytes to send.

socketFlagssocket_flags
SocketFlags

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

callback
AsyncCallback

Delegado AsyncCallback.The AsyncCallback delegate.

state
Object

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

Returns

IAsyncResult

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

Exceptions

buffer es null.buffer is null.

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.

El Socket se ha cerrado.The Socket has been closed.

Examples

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

Remarks

El método BeginSend inicia una operación de envío asincrónica al host remoto establecido en el método Connect, BeginConnect, Accepto BeginAccept.The BeginSend method starts an asynchronous send operation to the remote host established in the Connect, BeginConnect, Accept, or BeginAccept method. BeginSend producirá una excepción si no se llama primero a Accept, BeginAccept, Connecto BeginConnect.BeginSend will throw an exception if you do not first call Accept, BeginAccept, Connect, or BeginConnect. Llamar al método BeginSend le permite 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 delegado de AsyncCallback y pasar su nombre al método BeginSend.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 state debe contener los Socket conectados o predeterminados que se usan 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 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 método BeginSend a través del parámetro state.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 método EndSend.Your callback method should invoke the EndSend method. Cuando la aplicación llama a 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í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 llamar al método BeginSend, use el método WaitHandle.WaitOne.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 a la conexión, BeginSend también funciona para los protocolos sin conexión, siempre que llame primero al método Connect o BeginConnect 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 utilizar 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 a BeginSend 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 es así, no se enviará el datagrama y BeginSend producirá una SocketException.If it does, the datagram will not be sent and BeginSend will throw a SocketException.

Si especifica la marca de DontRoute como parámetro socketflags, 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.

Note

Si recibe un SocketException, utilice la propiedad SocketException.ErrorCode 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.

Note

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.

Note

state es una creación de instancias de una clase definida por el usuario.state is an instantiation of a user-defined class.

Note

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.

Note

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.

Note

El contexto de ejecución (el contexto de seguridad, el usuario suplantado y el contexto de llamada) se almacena en la memoria caché para los métodos de Socket 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 método de Socket asincrónico específico, una instancia de Socket específica 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.

See also

Applies to