21xrx.com
2025-07-14 17:41:43 Monday
登录
文章检索 我的文章 写文章
C++获取本机地址:方法和实现
2023-07-04 01:03:39 深夜i     16     0
C++ 获取本机地址 方法 实现

在C++编程中,我们经常需要获取本机地址,以便进行网络连接或识别设备。此时,我们可以使用一些简单的方法来获取本机地址。

1.使用gethostbyname函数获取本机地址

gethostbyname是一个C函数,用于获取指定主机名的相关信息,包括其IP地址。可以通过传入本机主机名来获取本机地址。以下是使用gethostbyname函数获取本机地址的示例代码:

#include <iostream>
#include <string.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
using namespace std;
int main()
{
  char hostname[255];
  struct hostent *host;
  char *ip;
  gethostname(hostname, sizeof(hostname));
  host = gethostbyname(hostname);
  ip = inet_ntoa(*((struct in_addr*)host->h_addr_list[0]));
  cout << "Local IP Address: " << ip << endl;
  return 0;
}

2.使用getifaddrs函数获取本机地址

getifaddrs是一个C函数,用于获取所有网络接口的信息,包括其IP地址。可以遍历网络接口列表,找到与本机相关的接口信息。以下是使用getifaddrs函数获取本机地址的示例代码:

#include <iostream>
#include <string.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;
int main()
{
  struct ifaddrs *ifaddr, *ifa;
  char host[NI_MAXHOST];
  int family, s;
  if (getifaddrs(&ifaddr) == -1) {
    perror("getifaddrs");
    exit(EXIT_FAILURE);
  }
  for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
    if (ifa->ifa_addr == NULL)
      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);
      if (s == 0) {
        if (strcmp(ifa->ifa_name, "lo") != 0) {
          cout << "Local IP Address: " << host << endl;
        }
      } else {
        cout << "getnameinfo error: " << gai_strerror(s) << endl;
      }
    }
  }
  freeifaddrs(ifaddr);
  return 0;
}

以上是获取本机地址的两种常用方法。我们可以根据需要选择其中之一来获取本机地址。无论使用哪种方法,都需注意数据类型的转换及错误处理。为了避免可能出现的问题,可以使用常用的网络编程库,如Boost.Asio和Qt等。

  
  

评论区