网络编程——网络基础(三)

网络字节序

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文件中
网络编程——网络基础(三)