大佬教程收集整理的这篇文章主要介绍了cocos2dx获取本机全部ip地址。。。,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
使用的是raknet中获取网卡的方式,支持linux,ios,安卓系统。未支持Win。
#if Defined(ANDROID)
void UdpSocket::getHostIpByString( char ipList[ MAXIMUM_numbER_OF_INTERNAL_IDS ][ 16 ],unsigned int binaryAddresses[MAXIMUM_numbER_OF_INTERNAL_IDS] )
struct ifreq ifreqs[MAXIMUM_numbER_OF_INTERNAL_IDS];
struct ifconf ifconf;
struct in_addr bin_addr;
memset(&ifconf,0,sizeof(ifconf));
ifconf.ifc_buf = (char*) (ifreqs);
ifconf.ifc_len = sizeof(ifreqs);
{ // get list of interfaces
int sock = socket(AF_INET,SOCK_STREAM,0);
if (sock < 0)
perror("Error creaTing socket");
return;
}
if ((ioctl(sock,SIOCGIFCONF,(char*) &ifconf )) < 0 )
perror("Error returned from ioctl(SIOGIFCONF)");
ifconf.ifc_len = 0;
}
close(sock);
}
int idx = 0;
int iface_count = ifconf.ifc_len/sizeof(struct ifreq);
printf("Interfaces (%d):\n",iface_count);
for( ; idx < iface_count; idx++)
char ip_addr[ 16/*INET_ADDRSTRLEN */];
struct sockaddr_in *b = (struct sockaddr_in *) &(ifreqs[idx].ifr_addr);
const char* host = inet_ntop(AF_INET,& b->sin_addr,ip_addr,sizeof ip_addr);
strcpy( ipList[idx],host );
if (inet_aton(host,&bin_addr) == 0)
perror("inet_aton error");
conTinue;
}
else
binaryAddresses[idx] = bin_addr.s_addr;
}
printf("\t%-10s\t%s (%08X)\n",ifreqs[idx].ifr_name,ipList[idx],binaryAddresses[idx]);
}
for ( ; idx < MAXIMUM_numbER_OF_INTERNAL_IDS; ++idx )
ipList[idx][0]=0;
}
}
#else
void UdpSocket::getHostIpByString(char ipList[ @H_551_6@mAXIMUM_numbER_OF_INTERNAL_IDS ][ 16 ],unsigned int binaryAddresses[@H_551_6@mAXIMUM_numbER_OF_INTERNAL_IDS])
struct ifaddrs *ifaddr,*ifa;
int family,s;
char host[NI_MAXHOST];
struct in_addr linux_in_addr;
if (getifaddrs(&ifaddr) == -1) {
printf( "Error getTing interface list\n");
}
int idx = 0;
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (!ifa->ifa_addr) conTinue;
family = ifa->ifa_addr->sa_family;
if (family == AF_INET) {
s = getnameinfo(ifa->ifa_addr,sizeof(struct sockaddr_in),host,NI_MAXHOST,NULL, 0,NI_NUMERICHOST);
printf ("getnameinfo() failed: %s\n",gai_strerror(s));
}
printf ("IP address: %s\n",host);
if (strcmp(host,"127.0.0.1")!=0)
strcpy( ipList[ idx ],host );
if (inet_aton(host,&linux_in_addr) == 0) {
perror("inet_aton");
}
else {
binaryAddresses[idx]=linux_in_addr.s_addr;
}
idx++;
}
}
}
for ( ; idx < @H_551_6@mAXIMUM_numbER_OF_INTERNAL_IDS; ++idx )
ipList[idx][0]=0;
}
freeifaddrs(ifaddr);
}
#endif
以上是大佬教程为你收集整理的cocos2dx获取本机全部ip地址。。。全部内容,希望文章能够帮你解决cocos2dx获取本机全部ip地址。。。所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。