用visual 2022写一个IP读取小程序
时间: 2024-03-12 11:47:55 浏览: 23
以下是一个使用Visual Studio 2022编写的C++程序,可以读取本机IP地址:
```cpp
#include <iostream>
#include <string>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
int main()
{
// 初始化Winsock
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0) {
std::cout << "WSAStartup failed with error: " << result << std::endl;
return 1;
}
// 获取本机主机名
char hostname[256];
result = gethostname(hostname, sizeof(hostname));
if (result != 0) {
std::cout << "gethostname failed with error: " << result << std::endl;
WSACleanup();
return 1;
}
// 获取本机IP地址
struct addrinfo* addrinfo_result = nullptr;
struct addrinfo hints;
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET; // 只获取IPv4地址
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
result = getaddrinfo(hostname, nullptr, &hints, &addrinfo_result);
if (result != 0) {
std::cout << "getaddrinfo failed with error: " << result << std::endl;
WSACleanup();
return 1;
}
for (auto ptr = addrinfo_result; ptr != nullptr; ptr = ptr->ai_next) {
auto sockaddr_in_ptr = reinterpret_cast<struct sockaddr_in*>(ptr->ai_addr);
auto ip = inet_ntoa(sockaddr_in_ptr->sin_addr);
std::cout << "IP address: " << ip << std::endl;
}
freeaddrinfo(addrinfo_result);
WSACleanup();
return 0;
}
```
该程序使用了Windows Sockets API来实现获取本机IP地址的功能。具体步骤如下:
1. 调用WSAStartup函数初始化Winsock。
2. 调用gethostname函数获取本机主机名。
3. 调用getaddrinfo函数获取本机IP地址的addrinfo结构体链表。
4. 遍历addrinfo结构体链表,将每个结构体中的IPv4地址转换成字符串形式,输出到控制台。
5. 调用freeaddrinfo函数释放addrinfo结构体链表。
6. 调用WSACleanup函数关闭Winsock。
注意,该程序只获取本机的IPv4地址,如果你需要获取IPv6地址,需要将hints.ai_family设置为AF_INET6,并且使用inet_ntop函数将IPv6地址转换成字符串形式。