linux c网络学习小结2(IP地址相关的操作)
linux c网络学习总结2(IP地址相关的操作)AF_INET Stream Data Structuresstruct sockaddr_in {short intsi
linux c网络学习总结2(IP地址相关的操作)
AF_INET Stream Data Structuresstruct sockaddr_in { short int sin_family; //使用的协议簇; 值为AF_INET
unsigned short int sin_port; //要使用的端口号,范围是从0 到65535,普通程序使用从1024到65535 struct in_addr sin_addr; //要使用的IP地址结构体,不是点分十进制,是一个数值型
}struct in_addr在不同的书中可以看到两种格式格式一struct in_addr { unsigned long int s_addr; //32位。使用大端格式存储数据}格式二typedef uint32_t in_addr_t;struct in_addr { in_addr_t s_addr; //32位。使用大端格式存储数据,};大多数书在讲解的时候才用的是格式一,简单容易记忆,并且是真实的格式(最原始的数据类型)。少数使用格式二,符合POSIX的命名格式,考虑安全和可移植性。(个人观点)
FUNCTIONS
in_addr_t inet_addr(const char* cp)include: netinet/in.hreturn: 成功返回点分十进制ip对应的in_addr_t类型的值,失败返回-1,description: 将将点分十进制IPv4地址转化为程序可用的IP地址(in_addr_t 数据,转换为网络上可以传输的数据存储格式)parameter: cp:点分十进制ip格式字符串的首地址。eg:210.43.32.51eg:
struct sockaddr_in s_addr;s_addr.sin_addr.s_addr = inet_addr ("210.43.32.51");
int inet_aton (char *cp, struct in_addr * addr)include: arpa/inet.hreturn: 成功返回1,cp是有效的IP地址,出错返回0,description:将点分十进制的IPv4地址转换成32位网络字节序二进制IP地址格式。parameter: cp:点分十进制ip格式字符串的首地址。eg:210.43.32.51 struct in_addr: 存放转换的结果,32位网络字节序二进制eg: in_addr addr;
inet_aton ("210.43.32.51", &addr);
char inet_ntoa (struct in_addr addr)include: arpa/inet.hreturn: 返回指向存放点分十进制IP地址字符串得而首地址description: 将32位网络字节序二进制IP地址格式转换成点分十进制的IPv4地址。parameter: cp:点分十进制ip格式字符串的首地址。eg:210.43.32.51 struct in_addr: 存放转换的结果,32位网络字节序二进制eg: in_addr addr;
inet_aton ("210.43.32.51", &addr); printf ("%s", inet_ntoa (addr));
int inet_pton (int family, const char *cp, void *addr)include: arpa/inet.hreturn: 1:成功,0: family指定的地址族和cp格式不对, -1:出错,查看errnodescription: 将字符串格式的IP地址(IPv4点分十进制和IPv6冒分16进制)转换为网络字节序二进制IP地址格式paramater: family:使用的协议簇,值是AF_INET 或 AFINET6
cp: 字符串格式的IP地址.IPv4点分十进制(210.43.32.51),IPv6冒分16进制(2001:DB8:2de:0:0:0:0:e13) addr: 转换成功网络字节序二进制IP地址格式的存放位置
char * inet_ntop (int family, void *addr, char *cp, size_t len)include: arpa/inet.hreturn:成功返回指向存放字符串格式的IP地址字符串的首地址,NULL:出错paramater: family:使用的协议簇,值是AF_INET 或 AFINET6
addr: 待转换的网络字节序二进制IP地址 cp: 转换的结果存放的位置 len: 存储结果缓冲区的大小
blog:http://blog.csdn.net/rentiansheng/article/details/8508431