c++获取本机ip(C++获取本机防止多开)
## C++ 获取本机 IP 地址### 简介在网络编程中,获取本机 IP 地址是一项常见需求。C++ 本身并没有提供直接获取 IP 地址的函数,但我们可以借助系统库函数来实现。本文将介绍两种常用的方法,并提供详细的代码示例。### 方法一:利用 `gethostname` 和 `getaddrinfo` 函数1.
获取主机名:
使用 `gethostname` 函数获取本机主机名。 2.
获取地址信息:
使用 `getaddrinfo` 函数根据主机名获取地址信息,包括 IP 地址。 3.
遍历地址信息:
遍历 `getaddrinfo` 返回的地址信息列表,找到第一个 IPv4 地址。
代码示例:
```cpp
#include
host;struct sockaddr_in
addr;// 获取主机名if (gethostname(hostname, sizeof(hostname)) == -1) {std::cerr << "Error getting hostname" << std::endl;return 1;}// 获取地址信息host = gethostbyname(hostname);if (host == nullptr) {std::cerr << "Error getting host by name" << std::endl;return 1;}// 遍历地址信息,找到第一个 IPv4 地址for (int i = 0; host->h_addr_list[i] != nullptr; ++i) {addr = (struct sockaddr_in
)host->h_addr_list[i];if (addr->sin_family == AF_INET) { // IPv4std::cout << "Local IP Address: " << inet_ntoa(addr->sin_addr) << std::endl;break;}}return 0; } ```
说明:
需要包含头文件 `
`gethostname` 函数用于获取主机名。
`gethostbyname` 函数根据主机名获取主机信息,包括 IP 地址。
`inet_ntoa` 函数将网络字节序的 IP 地址转换为点分十进制字符串。### 方法二:利用 `getifaddrs` 函数 (推荐)1.
获取网络接口信息:
使用 `getifaddrs` 函数获取所有网络接口的信息。 2.
遍历接口信息:
遍历接口信息列表,找到类型为 `AF_INET` (IPv4) 的接口。 3.
获取 IP 地址:
从接口信息中获取 IP 地址。
代码示例:
```cpp
#include
ifaddr,
ifa;// 获取网络接口信息if (getifaddrs(&ifaddr) == -1) {std::cerr << "Error getting interface addresses" << std::endl;return 1;}// 遍历接口信息for (ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) {if (ifa->ifa_addr == nullptr) {continue;}// 找到 IPv4 地址if (ifa->ifa_addr->sa_family == AF_INET) {struct sockaddr_in
sa = (struct sockaddr_in
)ifa->ifa_addr;std::cout << "Interface: " << ifa->ifa_name << std::endl;std::cout << "Local IP Address: " << inet_ntoa(sa->sin_addr) << std::endl;}}// 释放内存freeifaddrs(ifaddr);return 0; } ```
说明:
需要包含头文件 `
`getifaddrs` 函数用于获取所有网络接口的信息。
`freeifaddrs` 函数用于释放 `getifaddrs` 函数分配的内存。
总结:
以上两种方法都可以获取本机 IP 地址,但 `getifaddrs` 函数更加通用,因为它可以获取所有网络接口的信息,而 `gethostbyname` 函数只能获取主机名对应的地址信息.
C++ 获取本机 IP 地址
简介在网络编程中,获取本机 IP 地址是一项常见需求。C++ 本身并没有提供直接获取 IP 地址的函数,但我们可以借助系统库函数来实现。本文将介绍两种常用的方法,并提供详细的代码示例。
方法一:利用 `gethostname` 和 `getaddrinfo` 函数1. **获取主机名:** 使用 `gethostname` 函数获取本机主机名。 2. **获取地址信息:** 使用 `getaddrinfo` 函数根据主机名获取地址信息,包括 IP 地址。 3. **遍历地址信息:** 遍历 `getaddrinfo` 返回的地址信息列表,找到第一个 IPv4 地址。**代码示例:**```cpp
include
include
include
include
include
方法二:利用 `getifaddrs` 函数 (推荐)1. **获取网络接口信息:** 使用 `getifaddrs` 函数获取所有网络接口的信息。 2. **遍历接口信息:** 遍历接口信息列表,找到类型为 `AF_INET` (IPv4) 的接口。 3. **获取 IP 地址:** 从接口信息中获取 IP 地址。**代码示例:**```cpp
include
include
include