网络编程——网络基础(三)
网络字节序
TCP/IP协议规定,网络数据必须采用大端字节序,即低地址高字节
大端:低地址存到高位,高地址存到低位
小端:低地址存到低位,高地址存到高位
为了使网络具有可移植性,使同样的C代码在大端小端计算机上编译后都能正确运行,可以调用以下函数做网络字节序和主机字节序的转换
h表示host ,n表示netwok ,l表示32位长整数 ,s表示16位短整数。
如果主机是小端字节序,这些函数将参数做相应的大小端之后然后返回,如果主机是大端字节序,这些函数不做转换,将参数原封不动的返回。
IP地址转化函数
早期:
现在:
转化形式:
sockaddr数据结构
struct sockaddr 很多网络编程函数诞生早于IPv4协议,所以使用的都是sockaddr结构体,为了向前兼容,现在sockaddr向前退化成(void *)的作用,传递一个地址给函数,至于这个函数是sockaddr_in还是sockaddr_in6,由地址族确定,然后函数内部再强制类型转化为所需的类型。
使用 sudo grep -r “struct sockaddr_in{” /usr 命令可以看到struct sockaddr_in结构体的定义,一般默认存储位置,/usr/include/linux/in.h文件中