ZBLOG

windows下getaddrinfo函数使用说明 写一个C代码例子

以下是一个简单的 C 代码例子,演示了如何在 Windows 下使用 getaddrinfo 函数:

#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>

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

int main() {
    WSADATA wsaData;
    int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (result != 0) {
        printf("WSAStartup failed with error: %d\n", result);
        return 1;
    }

    struct addrinfo hints, *res;
    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_UNSPEC; // IPv4 or IPv6
    hints.ai_socktype = SOCK_STREAM; // TCP socket
    hints.ai_protocol = IPPROTO_TCP;

    result = getaddrinfo("www.example.com", "80", &hints, &res);
    if (result != 0) {
        printf("getaddrinfo failed with error: %d\n", result);
        WSACleanup();
        return 1;
    }

    char ipstr[INET6_ADDRSTRLEN];
    
	// 遍历所有地址并打印
	for (struct addrinfo* p = res; p != NULL; p = p->ai_next) {
		void* addr;
		char* ipver;

		if (p->ai_family == AF_INET) { // IPv4 address
			struct sockaddr_in* ipv4 = (struct sockaddr_in*)p->ai_addr;
			addr = &(ipv4->sin_addr);
			ipver = "IPv4";
		}
		else { // IPv6 address
			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));
		printf("%s: %s\n", ipver, ipstr);
	}

    freeaddrinfo(res); // 释放资源
    WSACleanup();
    return 0;
}

在这个例子中,我们使用了 Winsock 库来初始化网络连接,并使用 getaddrinfo 函数获取 www.example.com 的 IP 地址。然后,遍历所有返回的地址并打印出它们的版本和字符串格式的 IP 地址。

需要注意的是,在 Windows 平台上编译时需要链接 Ws2_32.lib 库文件才能使用该函数。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=1180

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?