CAsyncSocket::SendTo
Chame essa função de membro para enviar dados para 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 sejam transmitidos.nBufLen
O comprimento dos dados em lpBuf em bytes.nHostPort
A porta que identifica o aplicativo de soquete.lpszHostAddress
O endereço de rede do soquete para o qual este objeto está conectado: um nome de computador, sistema autônomo "ftp.microsoft.com" ou um número pontilhado, sistema autônomo "128.56.22.8".nFlags
Especifica a maneira na qual a telefonar é feita.A semântica dessa função é determinada pelas opções de soquete e o nFlags parâmetro. A segunda é construída pela combinação de qualquer um dos seguintes valores com o C++ OR operador:MSG_DONTROUTE Especifica que os dados não devem ser sujeita a roteamento.Um fornecedor de Windows Sockets pode optar por ignorar este sinalizar.
MSG_OOB Enviar dados fora de banda (SOCK_STREAM only).
lpSockAddr
Um ponteiro para um SOCKADDR estrutura que contém o endereço de soquete de destino.nSockAddrLen
O tamanho de endereço em lpSockAddr em bytes.
Valor de retorno
Se não houver erro, SendTo Retorna o número total de caracteres enviados. (Observe que isso pode ser menor do 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 Um bem-sucedida AfxSocketInit deve ocorrer antes de usar essa API.
WSAENETDOWN A implementação do Windows Sockets detectou que o subsistema de rede falhou.
WSAEACCES O endereço solicitado é um endereço de difundido, mas o sinalizar apropriado não era conjunto.
WSAEINPROGRESS Uma operação de bloqueio de Windows Sockets está em andamento.
WSAEFAULT The lpBuf ou lpSockAddr parâmetros não fazem parte do espaço de endereçamento do usuário, ou o lpSockAddr argumento é muito pequeno (menor que o dimensionar de um SOCKADDR estrutura).
WSAEINVAL O nome do host é inválido.
WSAENET reiniciar A conexão deve ser reiniciar porque a implementação do Windows Sockets soltou.
WSAENOBUFS A implementação do Windows Sockets relata um deadlock de buffer.
WSAENOTCONN O soquete não está conectado (SOCK_STREAM only).
WSAENOTSOCK O descritor não é um soquete.
WSAEOPNOTSUPP MSG_OOB foi especificado, mas o soquete não é do tipo SOCK_STREAM.
WSAESHUTDOWN O soquete foi desligado; não é possível chamar SendTo em um soquete após ShutDown foi chamado com nHow definido como 1 ou 2.
WSAEWOULDBLOCK O soquete está marcado sistema autônomo não bloqueadas e bloquearia a operação solicitada.
WSAEMSGSIZE O soquete é do tipo SOCK_DGRAM e o datagrama é maior do que o máximo suportado pela implementação do Windows Sockets.
WSAECONNABORTED O circuito virtual foi anulado devido ao tempo limite ou Outros falha.
WSAECONNRESET O circuito virtual foi redefinido pelo lado remoto.
WSAEADDRNOTAVAIL O endereço especificado não está disponível na computador local.
WSAEAFNOSUPPORT Endereços na família especificado não podem ser usados com esse soquete.
WSAEDESTADDRREQ É necessário um endereço de destino.
WSAENETUNREACH A rede não pode ser acessada a partir deste host neste momento.
Comentários
SendTo é usado nos soquetes datagrama ou fluxo e é usada para gravar dados de saída em um soquete. Para soquetes do datagrama, é preciso ter cuidado para não exceder o IP dimensionar máximo do pacote de sub-redes subjacentes, que é fornecido pelo iMaxUdpDg elemento o WSADATA estrutura preenchido por AfxSocketInit.Se os dados forem muito extensas atomicamente passar pelo protocolo subjacente, o erro WSAEMSGSIZE são retornados, e nenhum dado é transmitido.
Observe que a conclusão bem-sucedida de um SendTo não indica que os dados foi entregue com êxito.
SendTo só é usado em um SOCK_DGRAM soquete para enviar um datagrama para um soquete específico identificado pelo lpSockAddr parâmetro.
Para enviar uma difundido (em um SOCK_DGRAM somente), o endereço no lpSockAddr parâmetro deve ser construído usando o endereço IP especial INADDR_BROADCAST (definido no arquivo de cabeçalho do Windows Sockets WINSOCK.H) em conjunto com o número da porta pretendido.Ou então, se o lpszHostAddress o parâmetro é NULO, o soquete é configurado para transmissão.É geralmente para um datagrama de difundido exceder o dimensionar em que pode ocorrer fragmentação, que implica a parte de dados do datagrama (exceto cabeçalhos) não deve exceder 512 bytes.
Para lidar com endereços IPv6, use CAsyncSocket::SendToEx.
Requisitos
Cabeçalho: afxsock.h