第五章 Linux网络编程基础API
主机字节序和网络字节序
<5.1.1>
Q:设定主机字节序和网络字节序是为了解决什么问题?
A:不同主机使用不同字节序直接传递数据时会产生数据解释错误的情况.
K:
1.CPU累加器装载字节,装载4字节为32位机,装载8字节为64位机.
2.字节在内存中的排列顺序影响装载的整数的值,即字节序问题.
3.大端字节序(big endian)即高位字节存在内存低地址,小端字节序(little endian)低位字节存在内存低地址.
现代PC大多采用小端字节序,故小端字节序又被称为主机字节序
How:
发送端将发送的数据转化成大端字节序(也称网络字节序)再发送,接收端依据自身采用的字节序决定是否转换.
More:
同一台机器上的两个进程,也要考虑字节序问题.(例如Java虚拟机采用大端字节序)
Linux转换函数
#include <netinet/in.h>
unsigned long int htonl( unsigned long int hostlong ); //host to nextwork long
unsigned short int htons( unsigned short int hostshort );
unsigned long int ntohl( unsigned long int netlong ) ;
unsigned short int ntohs ( unsigned short int netshort );
Derived Q:
- 不同主机的不同字节序是由什么定义的?
- 为什么Java虚拟机采用大端字节序?
网友评论