21xrx.com
2024-12-26 16:24:18 Thursday
登录
文章检索 我的文章 写文章
C++获取IP地址
2023-07-02 18:53:40 深夜i     --     --
C++编程 IP地址获取 网络编程 socket编程 IP地址转换

在网络编程中,经常需要获取当前机器的IP地址。C++作为一种常用的编程语言,自然也提供了获取IP地址的方法。

获取本机IP地址

在Windows系统下,可以使用WinSock库中提供的gethostname和gethostbyname函数来获取本机IP地址。具体代码可以如下:


#include <windows.h>

#include <winsock.h>

#include <iostream>

#pragma comment(lib,"ws2_32.lib")

using namespace std;

int main()

{

  WSADATA wsaData;

  WSAStartup(MAKEWORD(2,2),&wsaData);

  char name[100];

  gethostname(name,sizeof(name));

  HOSTENT *hent = gethostbyname(name);

  if (hent == NULL)

    cout<<"gethostbyname fail"<<endl;

    return 0;

  

  for (int i = 0; hent->h_addr_list[i] != NULL; i++)

  {

    char *ip = inet_ntoa(*(in_addr*)hent->h_addr_list[i]);

    cout<<"本机IP地址:"<<ip<<endl;

  }

  WSACleanup();

  return 0;

}

如上代码所示,我们首先需要初始化WinSock库,并使用gethostname函数获取当前机器名称,然后再通过gethostbyname函数获取机器信息。由于一个机器可能有多个IP地址,所以我们使用一个循环来输出所有的IP地址。

获取指定主机IP地址

同样的,我们可以通过gethostbyname函数来获取指定主机的IP地址。具体代码如下:


#include <windows.h>

#include <winsock.h>

#include <iostream>

#pragma comment(lib,"ws2_32.lib")

using namespace std;

int main()

{

  WSADATA wsaData;

  WSAStartup(MAKEWORD(2,2),&wsaData);

  char hostname[100];

  cout<<"请输入主机名:"<<endl;

  cin>>hostname;

  HOSTENT *hent = gethostbyname(hostname);

  if (hent == NULL) {

    cout<<"gethostbyname fail"<<endl;

    return 0;

  }

  for (int i = 0; hent->h_addr_list[i] != NULL; i++)

  {

    char *ip = inet_ntoa(*(in_addr*)hent->h_addr_list[i]);

    cout<<hostname<<"的IP地址:"<<ip<<endl;

  }

  WSACleanup();

  return 0;

}

如上代码所示,我们通过输入主机名,来获取指定主机的IP地址。

总结

本文简要介绍了C++中获取本机IP地址和获取指定主机IP地址的方法。本文代码在Windows系统上测试通过,但在其他系统上可能需要做出一些修改。希望对大家在网络编程中获取IP地址有所帮助。

  
  

评论区

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