Partager via


CAsyncSocket::SendTo

Appelez la fonction membre pour envoyer des données à une destination spécifique.

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  
);

Paramètres

  • lpBuf
    Une mémoire tampon qui contient les données à transmettre.

  • nBufLen
    La longueur des données dans lpBuf en octets.

  • nHostPort
    Le port identificateur l'application de socket.

  • lpszHostAddress
    L'adresse du réseau socket auquel cet objet est connecté : un nom de l'ordinateur tel que « ftp.microsoft.com, » ou un nombre séparé par des points tel que « 128.56.22.8 ».

  • nFlags
    Spécifie la façon dont l'appel est passé. La sémantique de cette fonction sont déterminées par les options de socket et le paramètre d' nFlags . Ce dernier est construit en combinant l'un des valeurs avec l'opérateur C++ OR :

    • MSG_DONTROUTE spécifie que les données ne doivent pas être soumises au routage. Un fournisseur de Windows Sockets peut choisir d'ignorer cette balise.

    • MSG_OOB envoyer des données hors bande (SOCK_STREAM uniquement).

  • lpSockAddr
    Un pointeur vers une structure de SOCKADDR qui contient l'adresse du socket cible.

  • nSockAddrLen
    La longueur de l'adresse dans lpSockAddr en octets.

Valeur de retour

Si aucune erreur ne se produit, SendTo retourne le nombre total de caractères envoyés. (Notez que cela peut être moins que le nombre indiqué par nBufLen.) Sinon, une valeur de SOCKET_ERROR est retournée, et le code d'erreur spécifique peut être récupéré en appelant GetLastError. Les erreurs suivantes s'appliquent à cette fonction membre :

  • WSANOTINITIALISED A réussi AfxSocketInit doit se produire avant d'utiliser cette API.

  • WSAENETDOWN que l'implémentation de Windows Sockets l'a détecté que le sous-système réseau a échoué.

  • WSAEACCES l'adresse demandée est une adresse de distribution, mais la balise appropriée n'a pas été définie.

  • WSAEINPROGRESS se bloque l'exécution de Windows Sockets est en cours.

  • WSAEFAULT les paramètres d' lpBuf ou d' lpSockAddr ne font pas partie de l'espace d'adressage d'utilisateur, ou l'argument d' lpSockAddr est trop petit (moins que la taille d'une structure de SOCKADDR ).

  • WSAEINVAL le nom d'hôte est incorrect.

  • WSAENETRESET La connexion doit être réinitialisé car l'implémentation de Windows Sockets un supprimée.

  • WSAENOBUFS les rapports d'implémentation de Windows Sockets un interblocage de mémoire tampon.

  • WSAENOTCONN le socket n'est pas connecté (SOCK_STREAM uniquement).

  • WSAENOTSOCK le modèle n'est pas un socket.

  • WSAEOPNOTSUPP   MSG_OOB a été spécifié, mais le socket n'est pas de type SOCK_STREAM.

  • WSAESHUTDOWN le socket a été arrêté ; il n'est pas possible d'appeler SendTo sur un socket après ShutDown a été appelé avec nHow affectez la valeur 1 ou 2.

  • WSAEWOULDBLOCK le socket est marqué comme non bloquant et l'opération demandée se bloquerait.

  • WSAEMSGSIZE Le socket est de type SOCK_DGRAM, et le datagramme dépasse la taille maximale pris en charge par l'implémentation de Windows Sockets.

  • LeWSAECONNABORTED VC a été suspendu en raison de délai d'attente ou autre échec.

  • LeWSAECONNRESET VC a été réinitialisé par la partie distant.

  • WSAEADDRNOTAVAIL l'adresse spécifiée est pas disponible sur l'ordinateur local.

  • Les adresses deWSAEAFNOSUPPORT dans la famille spécifiée ne peuvent pas être utilisées avec ce socket.

  • L'adresse de destination deWSAEDESTADDRREQ est requise.

  • WSAENETUNREACH le réseau ne peut pas être atteint de cet hôte de référence.

Notes

SendTo est utilisé dans le datagramme ou sockets flux et est utilisé pour écrire des données sortantes sur un socket. Pour les sockets datagramme, le il est recommandé de pour ne pas dépasser la taille maximale à en-tête pack IP des sous-réseaux sous-jacents, qui est fournie par l'élément d' iMaxUdpDg dans la structure de WSADATA complétée par AfxSocketInit. Si les données sont trop longues pour passer atomique via le protocole sous-jacent, l'erreur WSAEMSGSIZE est retournée, et aucune donnée n'est transmise.

Notez que l'achèvement d' SendTo n'indique pas si les données ont été correctement fournies.

SendTo est utilisé uniquement sur un socket de SOCK_DGRAM pour envoyer un datagramme à un socket spécifique identifié par le paramètre d' lpSockAddr .

Pour envoyer une distribution (sur SOCK_DGRAM uniquement), l'adresse du paramètre d' lpSockAddr doit être construite à l'aide de l'adresse IP spéciale INADDR_BROADCAST (défini dans le fichier d'en-tête Windows Sockets WINSOCK.H) avec le numéro de port prévu. Ou, si le paramètre d' lpszHostAddress est NULL, le socket est configuré pour la distribution. Il est généralement déconseillé pour un datagramme diffusé dépasse la taille à laquelle la fragmentation peut se produire, ce qui implique que la partie données du datagramme (sans les en-têtes) ne doit pas dépasser 512 octets.

Pour gérer des adresses de IPv6, utilisez CAsyncSocket::SendToEx.

Configuration requise

Header: afxsock.h

Voir aussi

Référence

CAsyncSocket, classe

Graphique de la hiérarchie

CAsyncSocket::Create

CAsyncSocket::Receive

CAsyncSocket::ReceiveFrom

CAsyncSocket::Send