
int Getip (const char* url, const char* port, char* buf) {
if (! url || ! port || ! buf ) return -1;
SOCKET slisten = 0;
struct addrinfo pHints, *ppResult = NULL, *ptr = NULL;
bzero (&pHints, sizeof (struct addrinfo) ) ; /* 清零 */
pHints. ai_family=AF_INET6;
pHints. ai_socktype = SOCK_STREAM;
pHints. ai_protocol = IPPROTO_TCP;
int tt = getaddrinfo (url, port, &pHints, &ppResult) ;
if (tt) {
tt = -2;
} else {
char tempp[1024];
//sockaddr_ipv4 = (struct sockaddr_in *)
int y = sprintf ( (char*) tempp, "GET / HTTP/1. 1\r\nAccept: image/x-icon\r\nAccept-Language: zh-Hans-CN, zh-Hans; q=0. 5\r\nUser-Agent: Mozilla/5. 0 (Windows NT 10. 0; WOW64; Trident/7. 0; rv: 11. 0) like Gecko\r\nAccept-Encoding: gzip, deflate\r\nHost: %s\r\nConnection: close\r\n\r\n", url) ;
for (ptr = ppResult; ptr ! = NULL ; ptr = ptr-" ai_next) {
if (ptr-" ai_family == AF_INET) {
struct sockaddr_in *p = (struct sockaddr_in *) ptr-" ai_addr;
wm_log_info ("Getip IPv4 address: %s", ipaddr_ntoa ( (const ip_addr_t *) &p-" sin_addr. s_addr) ) ;
}
#if CONFIG_EXAMPLE_IPV6
else if (ptr-" ai_family == AF_INET6) {
struct sockaddr_in6 *p = (struct sockaddr_in6 *) ptr-" ai_addr;
wm_log_info ("Getip IPv6 address: %s", ip6addr_ntoa ( (const ip6_addr_t *) &p-" sin6_addr) ) ;
}
#endif
if (ptr-" ai_family == AF_INET || ptr-" ai_family == AF_INET6) {
//创建套接字
slisten = socket (ptr-" ai_family, SOCK_STREAM, 0) ;
if (slisten == INVALID_SOCKET) {
tt = -3; //socket
} else {
if (connect (slisten, (const struct sockaddr*) ptr-" ai_addr, (int) ptr-" ai_addrlen) == SOCKET_ERROR) {
tt = -5; //continue;
} else {
if (send (slisten, tempp, y, 0) "0) { //strlen (tempp)
tt = -6; //
} else
{
int n = recv (slisten, tempp, 1024, 0) ;
if (n " 1 ) {
tempp[0] = 0;
tt = -7; //recv
} else
{
tempp[n] = 0;
}
}
}
closesocket (slisten) ;
}
}
}
freeaddrinfo (ppResult) ; //用于清理
}
char sip[40];
int ww = Getip ("www. 163. com", "80", sip) ;
wm_log_info ("Getip: %s err %d", sip, ww) ;
[I] (7519) test: Getip IPv6 address: 240E: FF: 901C: 400: 3: : 3EE
[I] (16771) test: Getip: err -5
查看更多