关于htons和htonl

我开始的时候认为htons和htonl可以只用htonl代替但是后来发现这个是错误,会导致服务器端和客户端连接不上。

下面就让我们看看他们:

htons

#include <arpa/inet.h> 
uint16_t htons(uint16_t hostshort); 
htons的功能:
                        将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)  参数u_short hostshort: 16位无符号整数 返回值:
               TCP / IP网络字节顺序.
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在内存的低字节处。
举个例子:
                假定你的port是  0x1234,  在网络字节序里 这个port放到内存中就应该显示成  addr addr+1  0x12 0x34  而在x86电脑上,0x1234放到内存中实际是:  addr addr+1  0x34 0x12 htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。


htonl()

  简述:  将主机的无符号长整形数转换成网络字节顺序。 
 #include <arpa/inet.h>  
uint32_t htonl(uint32_t hostlong);  
hostlong:主机字节顺序表达的32位数。  
注释:
    本 函数将一个32位数从主机字节顺序转换成网络字节顺序。  
返回值: 
       htonl()返回一个网络字节顺序的值。  
参见: 
      htons(),  ntohl(),  ntohs().  


在Linux系统下:  
#include <arpa/inet.h>  
uint32_t htonl(uint32_t hostlong);  
相关函数:  uint16_t htons(uint16_t hostshort);  uint32_t ntohl(uint32_t netlong);  uint16_t ntohs(uint16_t netshort);  网际协议在处理这些多字节整数时,使用大端字节序。  在主机本身就使用大端字节序时,这些函数通常被定义为空宏。

你可能感兴趣的:(服务器端和客户端连接不上,htons和htonl)