21xrx.com
2024-12-22 18:34:57 Sunday
登录
文章检索 我的文章 写文章
C++如何获取IP地址
2023-07-07 15:23:47 深夜i     --     --
C++ 获取 IP地址 网络编程 网络地址

C++作为一种流行的编程语言,在网络编程领域也有着广泛的应用。获取IP地址是网络编程中的一项基本操作,无论是用于Socket通信还是实现客户端/服务器架构,都需要用到IP地址。那么,在C++中如何获取IP地址呢?

首先需要了解的是,在网络编程中,IP地址是用字符串形式表示的。因此,获取IP地址的方法就是将网络地址转换为字符串。在C++中,可以使用以下方法获取IP地址:

1. gethostbyname函数

该函数是C++中获取IP地址最简单的方法之一。它的作用是根据主机名获取IP地址。

具体实现方法如下:


#include<sys/socket.h>

#include<arpa/inet.h> // 必须包含这个头文件

main()

{

  struct hostent *host;

  char *IP;

  char buf[1024];

  // 假设需要获取的主机名为www.baidu.com

  if((host = gethostbyname("www.baidu.com")) == 0)

  {

    printf("Get IP error: %s", strerror(errno));

  }

  IP = inet_ntoa(*((struct in_addr *)host -> h_addr));

  printf("Host name: www.baidu.com\n");

  printf("IP address: %s\n",IP);

}

2. getaddrinfo函数

getaddrinfo函数是C++中获取IP地址的另一种常用方法,它可以支持IPv6。该函数的作用是将节点名和服务名转换为一个或多个socket地址结构。

具体实现方法如下:


#include <sys/types.h>

#include <sys/socket.h>

#include <netdb.h>

#include <arpa/inet.h>

#include <iostream>

int main()

{

 struct addrinfo hints;   // 填充信

 struct addrinfo *res, *p;

 int status;

 char ipstr[INET6_ADDRSTRLEN];

 memset(&hints, 0, sizeof hints); // 确保0为向量中的所有位都为零

 hints.ai_family = AF_UNSPEC; // 适用于IPv4或IPv6

 hints.ai_socktype = SOCK_STREAM; // TCP流套接字

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

 {

  std::cerr << "getaddrinfo error: " << gai_strerror(status) << '\n';

  return 2;//退出函数并返回0以退出程序(即表明程序成功运行)

 }

 std::cout << "IP addresses for " << "www.baidu.com" << "\n\n";

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

 {

  void *addr;

  char *ipver;

  if (p->ai_family == AF_INET)

  {

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

   addr = &(ipv4->sin_addr);

   ipver = "IPv4";

  }

  else

  {

   // IP为 IPv6

   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);

  std::cout << ipver << ": " << ipstr << '\n';

 }

 freeaddrinfo(res); // 所有完成后释放地址信息结构

 return 0; //成功退出程序

}

以上是C++中获取IP地址的两种方法,建议根据实际应用场景选择合适的方法。通过以上实现方法,你可以很容易地获取到需要的IP地址,并在Socket编程或客户端/服务器框架的实现中使用。

  
  

评论区

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