84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
认证高级PHP讲师
我感觉linux下的inet_ntoa打印子网掩码有问题,这段程序在Mac系统上可以正确输出。 我自己写了个函数,可以输出正确结果。
#include <iostream> #include <sys/socket.h> #include <arpa/inet.h> #include <ifaddrs.h> #include <sstream> using namespace std; string getip(const sockaddr_in* addr) { ostringstream s; int a = ntohl(addr->sin_addr.s_addr); s << ((a >> 24) & 0xFF) << '.' << ((a >> 16) & 0xFF) << '.' << ((a >> 8) & 0xFF) << '.' << (a & 0xFF); return s.str(); } int main(void) { struct ifaddrs* myaddrs; struct sockaddr_in *ss, *kk; char buf[100]; if (getifaddrs(&myaddrs) == 0) { for (struct ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) { ss = (struct sockaddr_in*) ifa->ifa_addr; kk = (struct sockaddr_in*) ifa->ifa_netmask; if (ss->sin_family == AF_INET) cout << ifa->ifa_name << ":" << getip(ss) << " netmask:" << getip(kk) << endl; } } return 0; }
利用inet_ntop函数可以得到正确的结果
inet_ntop
我感觉linux下的inet_ntoa打印子网掩码有问题,这段程序在Mac系统上可以正确输出。
我自己写了个函数,可以输出正确结果。
利用
inet_ntop
函数可以得到正确的结果