zoukankan      html  css  js  c++  java
  • 寻址方式和字节顺序.md

    寻址方式和字节顺序

    • 在socket套接字编程中,为了准确定位通信双方和数据传输的有效性、完整性、编程时必须使用统一的寻址方式和字节排列顺序
    • 在TCP/IP协议通讯中,用户使用ip地址和端口号进行确认通信双方。而在其他协议中不一定也使用该方式确定通信双方。
    • winsock,用户可以使用tcp/ip地址家族中统一套接字地址结构解决TCP/IP寻址中可能出现的问题,该套接字地址结构定义如下
    struct sockaddr_in
    {
    short     sin_family;//指定地址家族即地址格式
    unsigned    short sinport;//端口号
    struct in_addr sin_addr;//ip地址
    char     sin_zero[8];//需要指定为0
    }
    
    • 这个结构中成员sin_family指定使用该套接字地址的地址家族,必须设置为AF_INET,表示程序使用的地址家族为TCP/IP
    • 该结构的最后一个成员并未实际使用,主要是为了与第一个版本的套接字地址结构大小相同而设置,使用时直接设置为0即可
    struct in_addr
    {
    union  {
        struct{
            unsigned char s_b1,s_b2,s_b3,s_b4;
          
    }S_un_b;//用四个u_char字符描述ip地址
    start{
        unsigned short s_w1,s_w2;
    }S_un_w;//用两个u_short类型描述ip地址
    unsigned long S_addr;//用一个u_long类型描述ip地址
    
        }S_un
    }
    
    • 通常使用u_long类型的字符进行描述ip地址即可,例如使用ip地址结构in_addr进行描述ip地址“192.168.0.1”
    sockaddr_in addr;
    addr.sin_addr.Sun.S_addr=inet_addr("192.168.0.1")
    
    • 首先定义sockaddr_in结构对象,ip地址结构in_addr中的成员S_addr赋值,因为结构成员S_Addr所描述的ip地址为网络字节顺序,所以调用inet_addr()函数将字符串ip转换为网络字节序顺序排列的ip地址

    字节顺序转换函数

    u_short htons(u_short hostshort)//将一个u_short类型的ip地址抓从主机字节顺序转换道网络字节顺序
    u_long htonl(u_long hostlong)//将一个u_long类型的ip地址从主机字节序转换为网络字节序
    u_long ntohl (u_long netlong)//将一个u_long类型的ip地址从网络字节序转换道主机字节序
    u_long ntohs(u_short netshort)//将一个字符串ip转换到网络字节顺序排序的ip地址
    unsignet long inet_addr(const char FAR * cp)//将一个字符串ip转换到网络字节序排序的ip地址
    char FAR * inet_ntoa(struct in_addr in)//将一个以网络字节序排序的ip地址转换为一个字符串ip
    
    • 以上函数与操作系统平台无关,使用这些函数编写的程序能在所有的操作系统平台中运行。
  • 相关阅读:
    request和response使用
    oracle_to_char
    oracl_LTRIM_RITRIM
    convert
    jdbc
    oracle_trunc
    [python]glob模块中的glob()函数为什么返回空列表??
    win10 anaconda+tensorflow+keras
    Golang学习:sublime text3配置golang环境
    2018/12/05学习笔记
  • 原文地址:https://www.cnblogs.com/binarysystemloophole/p/12831010.html
Copyright © 2011-2022 走看看