步骤:获得主机名(gethostname) - - - 通过主机名返回IP地址(gethostbyname),返回的是一个结构体,使用inet_ntop将网络字节序转为点分10进制;
#include <iostream>
#include <netdb.h>
#include <unistd.h>
#include <arpa/inet.h>
int GetLocalIPNew(char *ipaddr) {
char hostname[100];
char str[INET_ADDRSTRLEN];
int ret = gethostname(hostname, sizeof(hostname));
if (ret == -1) {
return -1;
}
//通过主机名返回IP地址
struct hostent *hent = gethostbyname(hostname);
if (nullptr == hent) {
return -2;
}
sprintf(ipaddr, "%s", inet_ntop(hent->h_addrtype, *(hent->h_addr_list), str, sizeof(str)));
return 0;
}
int main() {
char ipaddr[100];
GetLocalIPNew(ipaddr);
printf("%s", ipaddr);
return 0;
}