21xrx.com
2024-11-22 05:24:57 Friday
登录
文章检索 我的文章 写文章
C++获取本地IP地址:实现方法介绍
2023-07-06 03:43:52 深夜i     --     --
C++ 获取 本地IP地址 实现方法 介绍

在进行网络通信时,获取本机IP地址是十分必要的步骤。对于C++程序开发而言,获取本地IP地址的方法大致可以归纳为以下两种。

一、使用Windows API

Windows API提供了一种获取IP地址的方法,具体步骤如下:

1.包含头文件 ,Winsock2是Windows操作系统提供的网络编程库。

2.初始化Winsock2,在程序执行前进行初始化,并在程序结束时释放资源。示例代码如下:

WSADATA wsaData;

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)

  cout << "WSAStartup failed." << endl;

  return;

3.使用getaddrinfo()函数获取IP地址信息。该函数会将获取到的信息存储在addrinfo结构体数组中,需要遍历addrinfo结构体数组来获取IP地址信息。示例代码如下:

struct addrinfo hints, *res, *p;

char ipstr[INET_ADDRSTRLEN];

memset(&hints, 0, sizeof hints);

hints.ai_family = AF_UNSPEC;

hints.ai_socktype = SOCK_STREAM;

if (getaddrinfo("www.example.com", NULL, &hints, &res) != 0)

  cout << "getaddrinfo failed." << endl;

  return;

for (p = res; p != NULL; p = p->ai_next) {

  void *addr;

  string ipver;

  if (p->ai_family == AF_INET) {

    struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;

    addr = &(ipv4->sin_addr);

    ipver = "IPv4";

  } else {

    struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;

    addr = &(ipv6->sin6_addr);

    ipver = "IPv6";

  }

  inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);

  cout << ipver << ": " << ipstr << endl;

}

freeaddrinfo(res);

以上示例代码可以获取www.example.com的IP地址信息,需要根据实际需求更改相应的参数。

二、使用Boost库

除了使用Windows API,也可以使用Boost库提供的asio库来获取本地IP地址,具体步骤如下:

1.包含头文件 ,需要安装Boost库。

2.使用ip::tcp::resolver类来获取IP地址信息。先构造resolver对象,再使用resolve()函数获取IP地址信息。示例代码如下:

boost::asio::io_service io_service;

boost::asio::ip::tcp::resolver resolver(io_service);

boost::asio::ip::tcp::resolver::query query(boost::asio::ip::host_name(), "");

boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query);

while (iter != boost::asio::ip::tcp::resolver::iterator()) {

  boost::asio::ip::tcp::endpoint endpoint = *iter++;

  std::cout << endpoint.address().to_string() << std::endl;

}

以上示例代码使用boost::asio::ip::host_name()获取本机主机名,并传递空字符串查询IP地址信息,然后遍历resolver.resolve()函数返回的迭代器,获取IP地址信息。

综上,获取本地IP地址的方法有多种,选择适合自己项目的方法即可。

  
  

评论区

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