'inet_pton': identifier not found

匿名 (未验证) 提交于 2019-12-03 01:56:01

问题:

I'm trying to include the following code in my program but the error ('inet_pton': identifier not found) will appeared.

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

Output

 error C3861: 'inet_pton': identifier not found

the including header

 #include   #include   #include "udpDefine.h"  #include 

any helping may be missed some headers or lib.

回答1:

the function

int inet_pton(int af, const char *src, void *dst);

is declared in header file:

#include 

if this is Windows (Vista or later) there is Winsock analog to this ANSI version:

INT WSAAPI InetPton(   _In_   INT  Family,   _In_   PCTSTR pszAddrString,   _Out_  PVOID pAddrBuf );

try #include add Ws2_32.lib



回答2:

In windows XP (and later) you can use these functions:

#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 (WSAStringToAddress(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;               
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!