• linux网络编程-socket(1)


     上面是对应的IpV4的地址结构:

    sin_len整个结构的大小

    sin_family协议族,对应Tcp固定为AF_INET,除了tcp协议外还支持unix域协议等

    sin_port socket通信的端口

    sin_addr是一个无符号的32位的网络字节地址

    上面的结构体仅仅支持IPv4地址协议,如果支持其他协议咱办了,后面引入了通用协议的地址协议

    在使用的使用可以将IPv4协议转换成通过的地址结构,其中IPv4的

    sin_port socket通信的端口 2个字节

    sin_addr是一个无符号的32位的网络字节地址 4个字节

    sin_zero[8] 8个字节

    一共加起来就是14个字节

    刚好通用的sa_data[14]个字节对应起来

     在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿 0x12345678来说,从高位到低位的字节依次是0x12、0x34、0x56和0x78。
    高/低地址端和高/低字节都弄清了。我们再来回顾 一下Big-Endian和Little-Endian的定义,并用图示说明两种字节序:
    以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value:
    Big-Endian: 低地址存放高位,如下图:
    栈底 (高地址)
    ---------------
    buf[3] (0x78) -- 低位
    buf[2] (0x56)
    buf[1] (0x34)
    buf[0] (0x12) -- 高位
    ---------------
    栈顶 (低地址)

    Little-Endian: 低地址存放低位,如下图:
    栈底 (高地址)
    ---------------
    buf[3] (0x12) -- 高位
    buf[2] (0x34)
    buf[1] (0x56)
    buf[0] (0x78) -- 低位
    --------------
    栈 顶 (低地址)

    我们通过代码来测试下:

    #include<stdio.h>
    
    int main(){
        
        unsigned int a = 0x12345678;
        unsigned char*p = (char*)&a;
        printf("%0x %0x %0x %0x 
    ",p[0],p[1],p[2],p[3]);
        return 0;
        
    }

    程序的运行结果是:

    说明当前的机器是小端模式

    我们来测试下,将一个32位的本机地址转换成网络字节,网络字节输出应该是大端模式

    我们来看程序的代码:

    #include<stdio.h>
    #include <arpa/inet.h>
    int main(){
        
        unsigned int a = 0x12345678;
        unsigned char*p = (char*)&a;
        printf("%0x %0x %0x %0x 
    ",p[0],p[1],p[2],p[3]);
        
        unsigned int y = htonl(a);
        unsigned char*p2 = (char*)&y;
        printf("%0x %0x %0x %0x 
    ",p2[0],p2[1],p2[2],p2[3]);
        
        return 0;
        
    }

    我们使用ftp将代码上传到ubuntu系统上,我们使用gcc进行编译

    我们的源代码为1.c,我们进行到存储1.c的目录使用gcc进行编译

     gcc 1.c  -o 1

    然后执行输出的1这个可执行文件

    ./1

    我们来看程序的输出结果是:

    78 56 34 12
    12 34 56 78

    说明经过转换之后变成了大端模式

     

     我们比较直观的ip地址是192.168.2.132这个地址,但是这个地址对应的32位的网络地址是多少了,我们就需要用到上面的地址转换函数

    inet_addr是将192.168.2.132点分十进制的地址转换成32位的整数

  • 相关阅读:
    How To Scan QRCode For UWP (4)
    How To Crop Bitmap For UWP
    How To Scan QRCode For UWP (3)
    How To Scan QRCode For UWP (2)
    How To Scan QRCode For UWP (1)
    How to change windows applicatioin's position via Win32 API
    8 Ways to Become a Better Coder
    How to resize or create a thumbnail image from file stream on UWP
    C# winform压缩文件夹带进度条
    MS ACCESS MID函数
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7085954.html
Copyright © 2020-2023  润新知