8
votes

Y a-t-il une alternative à INET_NTOP / INETNTOP dans Windows XP?

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.


2 commentaires

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.


5 Réponses :


7
votes

Si vous ne faites que traiter avec des adresses IPv4, vous pouvez utiliser inet_ntoa . 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.

Vous pouvez également consulter Boost - The Boost :: Asio a un iNet_ntop Mise en œuvre fonctionnant dans Windows: Boost :: Asio :: Détail :: Socket_ops :: Inet_ntop . Vous pouvez voir le code source ici . < / p>


2 commentaires

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 :(



10
votes

de la couche Winsock:


1 commentaires

Notez que wsaaddresstostring 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.



3
votes

Il y a aussi inet_ntop fonction dans Documentation en ligne , mais il existe dans le fichier inet_ntop .c au moins depuis 2008 (selon la date de fichier). xxx


0 commentaires

1
votes

Vous pouvez utiliser WinSocket avec MINGW-64 sur Windows 7 xxx

linkwith xxx

cible: x86_64-w64-mingw32 Fil Modèle: Win32 GCC version 6.3.0 (GCC)


0 commentaires

0
votes

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


0 commentaires