c++ 获取本机ip地址
时间: 2024-08-26 08:02:43 浏览: 97
在C++中获取本机的IP地址通常需要使用操作系统的特定API或相关库。在Windows系统中,你可以使用Winsock库中的`gethostbyname()`函数,而在类Unix系统中,可以使用C标准库的`gethostname()`和`gethostbyname()`函数来获取。以下是一个简单的例子,展示了如何在类Unix系统中获取本机IP地址:
```cpp
#include <iostream>
#include <string>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
std::string getLocalIPAddress() {
std::string localIP;
char hostname[NI_MAXHOST];
if (gethostname(hostname, sizeof hostname) != -1) {
struct hostent *host = gethostbyname(hostname);
if (host != nullptr) {
for (int i = 0; host->h_addr_list[i] != nullptr; i++) {
char ip_str[INET_ADDRSTRLEN];
inet_ntop(AF_INET, host->h_addr_list[i], ip_str, sizeof ip_str);
localIP = ip_str;
}
}
}
return localIP;
}
int main() {
std::string ip = getLocalIPAddress();
std::cout << "本机IP地址是: " << ip << std::endl;
return 0;
}
```
这个程序首先通过`gethostname()`获取本机的主机名,然后使用`gethostbyname()`根据主机名获取主机信息,最后通过`inet_ntop()`函数将IP地址的网络字节序转换为可读的字符串格式。
请注意,这个例子可能需要链接网络库,例如在gcc编译时使用`-lnsl`和`-lresolv`选项。
如果你使用的是Windows系统,那么可以通过Winsock API获取IP地址,但这通常需要初始化Winsock,创建一个套接字,然后使用相关函数来查询。
阅读全文