套接字地址结构的比较:
字节排序函数
h代表host,n代表network,s代表short,l代表long。s是16位的值(端口号),l是32位的值(IPv4地址)。
字节操纵函数
#include<strings.h>
void bzero(void *dest, size_t nbytes);
把目标字符串中指定树木的字节置为0。使用此函数来把一个套接字地址结构初始化为0。
#include<string.h>
void *memset(void *dest, int c, size_t len);
把目标字符串中指定数目的字节值为值c。
字符串与网络字节序转换
通常使用的IP地址表示是点分十进制表示法,而网络字节序(存放在套接字地址结构中的值)是二进制。
IPv4:
inet_addr函数:(此函数已废弃,应该用inet_aton函数)
类型in_addr_t在内部声明为32位整数型。
将string指向的C字符串转换为一个32位的网络字节序二进制值。并返回。
inet_aton函数:与inet_addr函数在功能上完全相同,只不过函数利用了in_addr结构体
将string指向的C字符串转换为一个32位的网络字节序二进制值。
inet_ntoa函数,将网络字节序整数IP地址转换成熟悉的字符串(点分十进制形式)
IPv4和IPv6通用
inet_pton和inet_ntop函数
p(presentation)和n(numeric)分别代表表达和数值。
#include<arpa/inet.h>
int inet_pton(int family, char *strptr, vpid *addrptr);
const char *inet_ntop(int family, const void *addrptr, size_t len); //返回指向结果的指针
family参数可以是AF_INET或AF_INET6
inet_pton转换由strptr指针所指的字符串,并通过addrptr指针存放二进制结果。
inet_ntop进行相反的转换,从数值格式(addrptr)转换到表达格式(strptr),并返回指向结果的指针。
sock_ntop和相关函数
自行编写一个名为sock_ntop的函数,以指向某个套接字地址结构的指针为参数,查看该结构的内部,然后调用适当的函数返回该地址的表达格式。
char *sock_ntop(const struct sockadrr *sockaddr, socklen_t addrlen);
sockaddr指向一个长度为addrlen的套接字地址结构。本函数用它自己的景泰缓冲区来保存结果。而指向该缓冲区的一个指针就是它的返回值。