#import <Foundation/Foundation.h>
#include <arpa/inet.h> //for inet_addr
#import <netdb.h> //for struct addrinfo
/*
*使用inet_pton函数将ipv6地址转成字节序,即网络数据格式
*/
void ipv6String2in6_addr(){
struct in6_addr ip;
char *addr1, *addr2, *addr3;
addr1 = strdup("2a01:198:603:0:396e:4789:8e99:890f");
addr2 = strdup("2a01:198:603:0::");
addr3 = strdup("2a01::");
inet_pton(AF_INET6, addr1, &ip);
int i = 0;
for(i = 0; i < 16; i ++)
printf("0x%x ", ip.s6_addr[i]);
printf("\n---------------------\n");
inet_pton(AF_INET6, addr2, &ip);
for(i = 0; i < 16; i ++)
printf("0x%x ", ip.s6_addr[i]);
printf("\n---------------------\n");
inet_pton(AF_INET6, addr3, &ip);
for(i = 0; i < 16; i ++)
printf("0x%x ", ip.s6_addr[i]);
printf("\n---------------------\n");
}
/*
*使用inet_addr函数将ipv4地址转成字节序,即网络数据格式
*/
void ipv4String2in_addr0(){
NSString *ipString = @"192.168.0.1";
struct in_addr ip;
ip.s_addr = inet_addr([ipString UTF8String]);
printf("%d", ip.s_addr);
printf("\n---------------------\n");
}
/*
*使用inet_pton函数将ipv4地址转成字节序,即网络数据格式
*/
void ipv4String2in_addr1(){
NSString *ipString = @"192.168.0.1";
struct in_addr ip;
const char *add = [ipString UTF8String];
inet_pton(AF_INET, add, &ip);
printf("%d", ip.s_addr);
printf("\n---------------------\n");
}
void getAddressInfo(NSString *hostString){
struct addrinfo hints, *res, *res0;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
int gai_error = getaddrinfo([hostString UTF8String], [@"16" UTF8String], &hints, &res0);
if (gai_error != 0) {
return;
}
for (res = res0; res; res = res->ai_next)
{
if (res->ai_family == AF_INET) {
NSLog(@"ai_family = %d, AF_INET", AF_INET);
struct sockaddr_in *sockaddr = (struct sockaddr_in *)res->ai_addr;
in_port_t port = sockaddr->sin_port;
NSLog(@"port = %d", port);
NSLog(@"port = %d", htons(16));//主机字节顺序转变成网络字节顺序
NSLog(@"host = %d", sockaddr->sin_addr.s_addr);//主机字节顺序转变成网络字节顺序
NSString *ipString0 = hostString;
struct in_addr ip0;
ip0.s_addr = inet_addr([ipString0 UTF8String]);//主机字节顺序转变成网络字节顺序
NSLog(@"host = %d", ip0.s_addr);
NSString *ipString1 = hostString;
struct in_addr ip1;
const char *add1 = [ipString1 UTF8String];
inet_pton(AF_INET, add1, &ip1);//主机字节顺序转变成网络字节顺序
NSLog(@"host = %d", ip1.s_addr);
}else if (res->ai_family == AF_INET6) {
NSLog(@"ai_family = %d, AF_INET6", AF_INET6);
struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)res->ai_addr;
in_port_t port = sockaddr->sin6_port;
NSLog(@"port = %d", port);
NSLog(@"port = %d", htons(16));//主机字节顺序转变成网络字节顺序
for(int i = 0; i < 16; i ++)
printf("0x%x ", sockaddr->sin6_addr.s6_addr[i]);
printf("一样吗?\n");
struct in6_addr ip;
const char *addr1 = [hostString UTF8String];
inet_pton(AF_INET6, addr1, &ip);
for(int j = 0; j < 16; j ++)
printf("0x%x ", ip.s6_addr[j]);
}
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
getAddressInfo(@"192.168.0.1");
getAddressInfo(@"2a01:198:603:0:396e:4789:8e99:890f");
}
return 0;
}
IOS和stock相关结构体演示
最新推荐文章于 2023-06-22 00:06:49 发布