Share via


CAsyncSocket::SendTo

Llame a esta función miembro para enviar datos a un destino concreto.

int SendTo(
   const void* lpBuf,
   int nBufLen,
   UINT nHostPort,
   LPCTSTR lpszHostAddress = NULL,
   int nFlags = 0 
);
int SendTo(
   const void* lpBuf,
   int nBufLen,
   const SOCKADDR* lpSockAddr,
   int nSockAddrLen,
   int nFlags = 0 
);

Parámetros

  • lpBuf
    un búfer que contiene los datos que se transmitirán.

  • nBufLen
    la longitud de los datos en lpBuf en bytes.

  • nHostPort
    El puerto que identifica la aplicación de socket.

  • lpszHostAddress
    La dirección de red de socket con el que este objeto está conectado: un nombre de equipo como “ftp.microsoft.com,” o un número dotted como “128.56.22.8”.

  • nFlags
    Especifica la manera en que se realiza la llamada.La semántica de esta función viene determinada por las opciones de socket y el parámetro de nFlags .El último es construido combinando cualquiera de los valores siguientes con el operador de C++ OR :

    • MSG_DONTROUTE especifica que los datos no deben estar bajo el enrutamiento.Un proveedor de Windows Sockets puede elegir omitir este marcador.

    • Datos fuera de banda deMSG_OOB Send (SOCK_STREAM solo).

  • lpSockAddr
    Un puntero a una estructura de SOCKADDR que contiene la dirección de socket de destino.

  • nSockAddrLen
    la longitud de la dirección en lpSockAddr en bytes.

Valor devuelto

Si no se produce ningún error, SendTo devuelve el número total de caracteres enviado.(Observe que puede ser menor que el número indicado por nBufLen.) Si no, un valor de SOCKET_ERROR se devuelve, y un código de error específico puede recuperar llamando a GetLastError.Los errores siguientes se aplican a esta función miembro:

  • WSANOTINITIALISED A AfxSocketInit correcto debe aparecer antes de utilizar esta API.

  • La implementación de Windows Sockets deWSAENETDOWN The detectó que produjo el subsistema de la red.

  • La dirección solicitada speedWSAEACCES es una dirección de difusión, pero el marcador adecuado no se estableció.

  • La operación de Windows Sockets de bloqueo deWSAEINPROGRESS A está en curso.

  • WSAEFAULT The lpBuf o los parámetros de lpSockAddr no forma parte del espacio de direcciones del usuario, o argumento de lpSockAddr es demasiado pequeño (menor que el tamaño de una estructura de SOCKADDR ).

  • El nombre de host deWSAEINVAL The no es válido.

  • La conexión deWSAENETRESET The debe ser restaurada porque la implementación de Windows Sockets la quitado.

  • Informes de implementación de Windows Sockets deWSAENOBUFS The un interbloqueo del búfer.

  • El socket deWSAENOTCONN no está conectado (SOCK_STREAM solo).

  • WSAENOTSOCK El descriptor no es un socket.

  • WSAEOPNOTSUPP   MSG_OOB se especificó, pero el socket no es de SOCK_STREAMescrito.

  • Se cierra el socket deWSAESHUTDOWN The; no es posible llamar a SendTo en un socket después de que ShutDown invocarlo con nHow establecido en 1 o 2.

  • El socket deWSAEWOULDBLOCK The se marca como sin bloquear y la operación solicitada bloquearía.

  • El socket deWSAEMSGSIZE The es de SOCK_DGRAMcon tipo, y el datagrama es mayor que el máximo admitido por la implementación de Windows Sockets.

  • El circuito virtual deWSAECONNABORTED The era anulado debido al tiempo de espera u otro error.

  • El circuito virtual deWSAECONNRESET Se ha restablecido por el lado remoto.

  • La dirección especificada speedWSAEADDRNOTAVAIL no está disponible en el equipo local.

  • Las direcciones deWSAEAFNOSUPPORT en la familia especificada no se pueden utilizar con este socket.

  • Se requiere la dirección de destino deWSAEDESTADDRREQ A.

  • Red deWSAENETUNREACH no se puede obtener acceso desde este host en este momento.

Comentarios

SendTo se utiliza en datagrama o sockets de secuencia y se utiliza para escribir datos de salida en un socket.Para los sockets de datagrama, se debe tener cuidado para no superar el tamaño de paquete IP máximo de las subredes subyacentes, que es especificado por el elemento de iMaxUdpDg en la estructura de WSADATA completa por AfxSocketInit.Si los datos es demasiado largo pasar atómico con el protocolo subyacente, se devuelve el error WSAEMSGSIZE , y no se recibe ningún dato.

Observe que la finalización correcta de SendTo no indica que los datos se proporcionó correctamente.

SendTo sólo se utiliza en un socket de SOCK_DGRAM para enviar un datagrama a un socket específico identificado por el parámetro de lpSockAddr .

Para enviar una difusión (en SOCK_DGRAM sólo), la dirección del parámetro de lpSockAddr debe ser construida utilizando la dirección IP especial INADDR_BROADCAST (definido en el archivo de encabezado de Windows Sockets WINSOCK.H) junto con el número de puerto deseado.o, si el parámetro de lpszHostAddress es NULL, el socket se configura para la difusión.Suele ser desaconsejable que un datagrama de difusión supera el tamaño en el que la fragmentación puede producir, que implica que la parte de datos de datagrama (excepto encabezados) no debe superar 512 bytes.

Para controlar las direcciones de IPv6, utilice CAsyncSocket:: SendToEx.

Requisitos

encabezado: afxsock.h

Vea también

Referencia

Clase de CAsyncSocket

Gráfico de jerarquía

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send