Compartilhar via


CAsyncSocket::SendTo

Chamar essa função de membro para enviar dados a um destino específico.

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
    Um buffer que contém os dados a serem passados.

  • nBufLen
    O comprimento dos dados em lpBuf em bytes.

  • nHostPort
    A porta que identifica o aplicativo de soquete.

  • lpszHostAddress
    O endereço de rede de soquete a que este objeto está conectado: um nome do computador tal como “ftp.microsoft.com”, ou um número pontilhada como “128.56.22.8”.

  • nFlags
    Especifica a maneira na qual o chamada é feita. A semântica de essa função é determinada pelas opções de soquete e pelo parâmetro de nFlags . O segundo é construído combinando alguns dos seguintes valores com o operador de OR C++:

    • MSG_DONTROUTE especifica que os dados não devem ser sujeitos a rotear. Um fornecedor de soquetes do windows pode escolher para ignorar este sinalizador.

    • Dados fora de banda de envio deMSG_OOBSOCK_STREAM (somente).

  • lpSockAddr
    Um ponteiro a estrutura de SOCKADDR que contém o endereço de soquete de destino.

  • nSockAddrLen
    O comprimento do endereço em lpSockAddr em bytes.

Valor de retorno

Se nenhum erro ocorre, SendTo retorna o número total de caracteres enviados. (Observe que isso pode ser menor que o número indicado por nBufLen.) Caso contrário, um valor de SOCKET_ERROR é retornado, e um código de erro específico pode ser recuperado chamando GetLastError. Os seguintes erros se aplicam a essa função de membro:

  • WSANOTINITIALISED A AfxSocketInit com êxito deve ocorrer antes de usar este API.

  • WSAENETDOWN a implementação da do windows detectou que o subsistema de rede falhou.

  • WSAEACCES o endereço aplicativo é um endereço de difusão, mas o sinalizador apropriado não foi definido.

  • A operação de soquetes do windows de bloqueio deWSAEINPROGRESS A está em andamento.

  • WSAEFAULT os parâmetros de lpBuf ou de lpSockAddr não é parte do espaço de endereço do usuário, ou o argumento de lpSockAddr é muito pequeno (menos que o tamanho de uma estrutura de SOCKADDR ).

  • WSAEINVAL o nome de host é inválido.

  • WSAENETRESET a conexão deve ser redefinido como a implementação da do windows a soltou.

  • WSAENOBUFS os relatórios de implementação de soquetes do windows um deadlock de buffer.

  • WSAENOTCONN o soquete não está conectado (SOCK_STREAM somente).

  • WSAENOTSOCK o descritor não for um soquete.

  • WSAEOPNOTSUPP   MSG_OOB foi especificado, mas o soquete não é do tipo SOCK_STREAM.

  • WSAESHUTDOWN o soquete foi fechada; não é possível chamar SendTo em um soquete após ShutDown foi chamado com nHow definido como 1 ou 2.

  • WSAEWOULDBLOCK o soquete é marcado como nonblocking e a operação solicitada bloquearia.

  • WSAEMSGSIZE o soquete é do tipo SOCK_DGRAM, e a datagrama é maior do que o máximo suportado pela implementação da do windows.

  • WSAECONNABORTED o circuito virtual foi anuladas devido ao tempo limite ou outra falha.

  • WSAECONNRESET o circuito virtual foi redefinido pelo lado do servidor remoto.

  • WSAEADDRNOTAVAIL o endereço especificado não está disponível no computador local.

  • Endereços deWSAEAFNOSUPPORT na família especificada não podem ser usados com esse soquete.

  • O endereço de destino deWSAEDESTADDRREQ A é necessário.

  • WSAENETUNREACH a rede não pode ser alcançado de este host no momento.

Comentários

SendTo é usado em soquetes de datagrama ou de fluxo e usado para gravar dados de saída em um soquete. Para os soquetes de datagrama, deve-se ter cuidado para não exceda o tamanho máximo de pacote de IP de sub-rede subjacentes, que é determinado pelo elemento de iMaxUdpDg na estrutura de WSADATA completada por AfxSocketInit. Se os dados são muito longos passar atomic protocolo com o subjacente, o erro WSAEMSGSIZE é retornado, e nenhum dado é passado.

Observe que a conclusão com êxito de SendTo não indica que os dados foram enviados com êxito.

SendTo é usado somente em um soquete de SOCK_DGRAM para enviar uma datagrama a um soquete específico identificado pelo parâmetro de lpSockAddr .

Para enviar uma transmissão (em SOCK_DGRAM somente), o endereço no parâmetro de lpSockAddr deve ser construída usando o endereço IP especial INADDR_BROADCAST (definido no arquivo de cabeçalho WINSOCK.H) da do windows juntamente com o número da porta esperado. Ou, se o parâmetro de lpszHostAddress é NULO, o soquete é configurado para transmissão. É geralmente desaconselhável para uma datagrama de difusão exceder o tamanho em que a fragmentação pode ocorrer, que significa que a parte de dados de datagrama (excluindo headers) não deve exceder 512 bytes.

Para manipular endereços IPV6, use CAsyncSocket::SendToEx.

Requisitos

Cabeçalho: afxsock.h

Consulte também

Referência

Classe CAsyncSocket

Gráfico da hierarquia

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send