zoukankan      html  css  js  c++  java
  • 关于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); 网际协议在处理这些多字节整数时,使用大端字节序。 在主机本身就使用大端字节序时,这些函数通常被定义为空宏。
  • 相关阅读:
    mysql数据库表名区分大小写
    Maven配置和使用
    Centos7修改网卡名称
    mongo启动报错问题处理
    zabbix分布式部署和主机自动发现
    zabbix-server、proxy、agent的分布式部署步骤
    zabbix常见错误处理方式
    git用ssh方式下载和提交代码
    CentOS7使用阿里云的yum源
    VMware三种网络模式详解
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3014177.html
Copyright © 2011-2022 走看看