21xrx.com
2024-12-22 23:34:57 Sunday
登录
文章检索 我的文章 写文章
C++获取本机地址:方法和实现
2023-07-04 01:03:39 深夜i     --     --
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等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复