J’essaie d’inclure le code suivant dans mon programme mais l’erreur (‘inet_pton’: identifiant introuvable) apparaîtra.
// IPv4: struct sockaddr_in ip4addr; int s; ip4addr.sin_family = AF_INET; ip4addr.sin_port = htons(3490); inet_pton(AF_INET, "10.0.0.1", &ip4addr.sin_addr); s = socket(PF_INET, SOCK_STREAM, 0); bind(s, (struct sockaddr*)&ip4addr, sizeof ip4addr);
Sortie
error C3861: 'inet_pton': identifier not found
l’en-tête inclus
#include #include #include "udpDefine.h" #include
toute aide peut manquer certains en-têtes ou lib.
la fonction
int inet_pton(int af, const char *src, void *dst);
est déclaré dans le fichier d’en-tête:
#include
s’il s’agit de Windows (Vista ou version ultérieure), Winsock est compatible avec cette version ANSI:
INT WSAAPI InetPton( _In_ INT Family, _In_ PCTSTR pszAddrSsortingng, _Out_ PVOID pAddrBuf );
essayez #include
ajoutez Ws2_32.lib
Dans Windows XP (et versions ultérieures), vous pouvez utiliser ces fonctions:
#include #include #include #include #include int inet_pton(int af, const char *src, void *dst) { struct sockaddr_storage ss; int size = sizeof(ss); char src_copy[INET6_ADDRSTRLEN+1]; ZeroMemory(&ss, sizeof(ss)); /* stupid non-const API */ strncpy (src_copy, src, INET6_ADDRSTRLEN+1); src_copy[INET6_ADDRSTRLEN] = 0; if (WSASsortingngToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) { switch(af) { case AF_INET: *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr; return 1; case AF_INET6: *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr; return 1; } } return 0; } const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) { struct sockaddr_storage ss; unsigned long s = size; ZeroMemory(&ss, sizeof(ss)); ss.ss_family = af; switch(af) { case AF_INET: ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src; break; case AF_INET6: ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src; break; default: return NULL; } /* cannot direclty use &size because of ssortingct aliasing rules */ return (WSAAddressToSsortingng((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)? dst : NULL; }
Lien avec la bibliothèque ws2_32.
Dans mon cas, la fonction n’a pas pu être trouvée car il y avait un “#define WINVER 0x0502” dans un fichier d’en-tête.
Sur les systèmes Windows, la version 0x600 (= Vista) est la moins requirejse pour cette fonction.
Les utilisateurs de Windows peuvent également trouver la réponse ici:
https://msdn.microsoft.com/de-de/library/windows/desktop/cc805844(v=vs.85).aspx
Vous devez utiliser le fichier Ws2tcpip.h et append Ws2_32.lib à votre éditeur de liens.
Pour résoudre ce problème, ajoutez simplement ce qui suit à votre code après tout #include
#pragma comment(lib, "ws2_32.lib")