在写Linux Socket编程时经常用到上述函数,常见的用法是:
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(ip.c_str());
htons,host to network short int
ntohs,network to host short int
htonl,host to network long int
ntohl,network to host long int
可以看出上述几个方法用于网络字节序和主机字节序的相互转换。那么需要理解网络字节序和主机字节序:
网络字节顺序NBO(Networkd Byte Order):按从高到低的顺序存储,即小端模式;
主机字节顺序HBO(Host Byte Order):主机的字节顺序与与CPU设计有关,数据的顺序是由cpu决定。
由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的顺序,也就是网络字节顺序 。