地址格式 inet_pton() int_ntop()

来源:互联网 发布:流星蝴蝶剑轻功 知乎 编辑:程序博客网 时间:2024/09/21 06:16


套接字通信域domain

AF_INET--------IPv4因特网域

AF_INET6--------IPv6因特网域

 

为了使不同格式地址能够传入套接字函数,地址被强制转换成通用的地址结构sockaddr表示。

 

因特网地址定义在<netinet/in.h>中。

IPv4因特网域(AF_INET)中,地址用sockaddr_in表示。

struct in_addr {

    in_addr_t  s_addr;

};

In_addr_tuint_32类型。

struct sockaddr_in{

sa_family_t sin_family;

in_port_t sin_port;

Struct in_addr sin_addr;

};

#include<arpa/inet.h>

const char *inet_ntop(int domain,const void *restrict addr,

char *restrict str,socklen_t size);

功能:将网络字节序的二进制地址转化为文本字符串格式

返回:成功,字符串指针;失败,NULL

int inet_pton(int domain,const char *restrict str,void *restrict addr);

将文本字符格式的地址转化为网络序的二进制地址

返回:成功,1;地址无效,0;失败,-1

domain:通信域,IPv4AF_INETIPv6AF_INET6

addr:指示网络字节序的二进制地址存储空间指针,32位,struct in_addr结构

str:保存文本字符串区域指针

sizestr字符串的空间大小,针对AF_INET,定义常量INET_ADDRSTRLEN16,针对AF_INET6,定义常量INET6_ADDRSTRLEN46

程序实例:

#include <stdio.h>

 

#include <stdlib.h>

 

#include <string.h>

 

#include <unistd.h>

 

#include <sys/socket.h>

 

#include <netinet/in.h>

 

int main (void)

 

{

printf("%d,%d\n",INET_ADDRSTRLEN,INET6_ADDRSTRLEN);

 

char IPdotdec[16]; //存放点分十进制IP地址

 

struct in_addr s; // IPv4地址结构体

 

// 输入IP地址

 

printf("Please input IP address: ");

 

scanf("%s", IPdotdec);

 

// 转换

 

inet_pton(AF_INET, IPdotdec, (void *)&s);

 

printf("inet_pton: 0x%x\n", s.s_addr); // 注意得到的字节序

 

// 反转换

 

inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);

 

printf("inet_ntop: %s\n", IPdotdec);

 

}

输出:

10.3.0.128

ox8000030a

参考:http://baike.baidu.com/link?url=vB1KtjVOSCCi7eMUBdmieJR_YYaVys9AkK0kt2EhbDLI5-qrtqYbmuIsx_iRKdze1AHi1tJR8dv-a04aD7cxLq

 

  

 

0 0
原创粉丝点击