2.3
Intel处理器的字节顺序是和DEC VAX 处理器的字节顺序一致的。因此它与 68000 型处理
器以及Internet的顺序是不同的,所以用户在使用时要特别小心以保证正确的顺序。
. 15 .
任何从Windows Sockets函数对IP地址和端口号的引用和传送给Windows Sockets函数的IP
地址和端口号均是按照网络顺序组织的,这也包括了 sockaddr_in 结构这一数据类型中的 IP 地
址域和端口域(但不包括sin_family域)。
考虑到一个应用程序通常用与“时间”服务对应的端口来和服务器连接,而服务器提供某
种机制来通知用户使用另一端口。因此 getservbyname()函数返回的端口号已经是网络顺序了,
可以直接用来组成一个地址,而不需要进行转换。然而如果用户输入一个数,而且指定使用这
一端口号,应用程序则必须在使用它建立地址以前,把它从主机顺序转换成网络顺序(使用
htons()函数)。相应地,如果应用程序希望显示包含于某一地址中的端口号(例如从 getpeername()
函数中返回的),这一端口号就必须在被显示前从网络顺序转换到主机顺序(使用 ntohs()函数)。
由于 Intel 处理器和 Internet 的字节顺序是不同的,上述的转换是无法避免的,应用程序的
编写者应该使用作为Windows Sockets API一部分的标准的转换函数,而不要使用自己的转换函
数代码。因为将来的 Windows Sockets 实现有可能在主机字节顺序与网络字节顺序相同的机器
上运行。因此只有使用标准的转换函数的应用程序是可移植的。
Intel处理器的字节顺序是和DEC VAX 处理器的字节顺序一致的。因此它与 68000 型处理
器以及Internet的顺序是不同的,所以用户在使用时要特别小心以保证正确的顺序。
. 15 .
任何从Windows Sockets函数对IP地址和端口号的引用和传送给Windows Sockets函数的IP
地址和端口号均是按照网络顺序组织的,这也包括了 sockaddr_in 结构这一数据类型中的 IP 地
址域和端口域(但不包括sin_family域)。
考虑到一个应用程序通常用与“时间”服务对应的端口来和服务器连接,而服务器提供某
种机制来通知用户使用另一端口。因此 getservbyname()函数返回的端口号已经是网络顺序了,
可以直接用来组成一个地址,而不需要进行转换。然而如果用户输入一个数,而且指定使用这
一端口号,应用程序则必须在使用它建立地址以前,把它从主机顺序转换成网络顺序(使用
htons()函数)。相应地,如果应用程序希望显示包含于某一地址中的端口号(例如从 getpeername()
函数中返回的),这一端口号就必须在被显示前从网络顺序转换到主机顺序(使用 ntohs()函数)。
由于 Intel 处理器和 Internet 的字节顺序是不同的,上述的转换是无法避免的,应用程序的
编写者应该使用作为Windows Sockets API一部分的标准的转换函数,而不要使用自己的转换函
数代码。因为将来的 Windows Sockets 实现有可能在主机字节顺序与网络字节顺序相同的机器
上运行。因此只有使用标准的转换函数的应用程序是可移植的。