J'essaie de compiler les exemples de programmation de réseau Beej, mais Windows XP n'a pas une telle fonction. J'utilise Mingw, si cela fait de la différence. P>
5 Réponses :
Si vous ne faites que traiter avec des adresses IPv4, vous pouvez utiliser inet_ntoa code> . Il est disponible sur Windows 2000 ou plus tard. Sinon, vous devrez avoir besoin de Vista et plus tard, ou écrivez votre propre fonction INET_NTOP. P>
Vous pouvez également consulter Boost - The Boost :: Asio a un iNet_ntop Code> Mise en œuvre fonctionnant dans Windows: Boost :: Asio :: Détail :: Socket_ops :: Inet_ntop Code >. Vous pouvez voir le code source ici . < / p>
inet_ntoa est disponible sur chaque version de Windows avec Winsock2, vous ne pouvez pas faire confiance à MSDN lorsqu'il s'agit de la version minimale, ils semblent avoir oublié Win9x et NT4
Les en-têtes MINGW ne contiennent pas de déclaration d'INET_NTOP. Donc, même sur Windows Vista et plus tard, vous ne pouvez pas l'utiliser :(
de la couche Winsock: p>
wsaaddresstostring code> strong> (NTOP) LI>
WSASTRAINGTADRESS code> strong> (PTON) LI>
ul>
Notez que wsaaddresstostring code> ajoutera également le numéro de port si votre structure d'adresse en possède une. Donc, pour simplement obtenir la propriété intellectuelle, vous devrez peut-être créer une nouvelle adresse sans port.
Il y a aussi inet_ntop code> fonction dans Documentation en ligne , mais il existe dans le fichier inet_ntop .c code> au moins depuis 2008 (selon la date de fichier).
Vous pouvez utiliser WinSocket avec MINGW-64 sur Windows 7 linkwith p> cible: x86_64-w64-mingw32
Fil Modèle: Win32
GCC version 6.3.0 (GCC) P> P>
Vous voudrez peut-être utiliser quelque chose de Jeroen Massar fourni Ici , extrait de son message suit:
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
{
if (af == AF_INET)
{
struct sockaddr_in in;
memset(&in, 0, sizeof(in));
in.sin_family = AF_INET;
memcpy(&in.sin_addr, src, sizeof(struct in_addr));
getnameinfo((struct sockaddr *)&in, sizeof(struct
sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST);
return dst;
}
else if (af == AF_INET6)
{
struct sockaddr_in6 in;
memset(&in, 0, sizeof(in));
in.sin6_family = AF_INET6;
memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
getnameinfo((struct sockaddr *)&in, sizeof(struct
sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
return dst;
}
return NULL;
}
INET_NTOP est également manquant dans la mise en œuvre WINSOCK sur Windows Phone 8.1. Comment MS pourrait-il espérer un succès d'une plate-forme aussi criblée?
Oui, et aussi manquant pour Windows CE 7.