写一个使用inet_pton()的示例,需要完整的代码
时间: 2024-10-18 20:07:56 浏览: 54
`inet_pton()`是许多网络编程库(如Linux的glibc)提供的函数,它将IPv4或IPv6地址从点分十进制形式转换为二进制形式的地址数组。下面是一个使用`inet_pton()`函数在C语言中的简单示例,我们首先包括必要的头文件,并假设你已经链接了socket库(`netinet/in.h`)。
```c
#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>
int main() {
char ip_str[INET_ADDRSTRLEN]; // 存放点分十进制IP
char ip_binary[INET6_ADDRSTRLEN]; // 存放二进制IP
// 使用gethostname获取本地主机的IP
if (gethostname(ip_str, sizeof(ip_str))) {
perror("gethostname failed");
return 1;
}
// 尝试将IPv4地址转换成二进制
if (inet_pton(AF_INET, ip_str, &ip_binary)) {
if (inet_ntop(AF_INET, &ip_binary, ip_str, INET_ADDRSTRLEN)) {
printf("IPv4: %s (binary: %s)\n", ip_str, inet_ntop(AF_INET, &ip_binary, ip_str, INET_ADDRSTRLEN));
} else {
perror("inet_ntop for IPv4 failed");
}
}
// 如果是IPv6,尝试同样的转换
if (strncasecmp(ip_str, ":", 1) == 0) { // 检查是否为IPv6地址
if (inet_pton(AF_INET6, ip_str, &ip_binary)) {
if (inet_ntop(AF_INET6, &ip_binary, ip_binary, INET6_ADDRSTRLEN)) {
printf("IPv6: %s (binary: %s)\n", ip_str, ip_binary);
} else {
perror("inet_ntop for IPv6 failed");
}
} else {
printf("Not an IPv6 address: %s\n", ip_str);
}
} else {
printf("Not an IP address: %s\n", ip_str);
}
return 0;
}
```
阅读全文