• 套接字(socket)与socket 编程


    • 字节序:
      • 主机字节序(host byte order):不同的主机有不同的字节序,x86:小端;
      • 网络字节序(network byte order):大端字节序;

    0. 什么是套接字

    • 套接字是网络进程间的通信(网络进程间通信,又叫 network IPC)接口,进程用该接口能够与其他进程通信,无论是否在同一台计算机上,
    • 套接字是对通信端点的抽象,就像文件描述符(file descriptor)是对文件的抽象表示;

    1. 基本概念

    • socket 可以看成是用户进程(Application,工作在用户空间)与内核网络协议栈(内核空间,kernel space)的编程接口(称为套接口);

      • 以实现用户空间的应用对内核网络协议栈提供的服务的访问和调用;


      这里写图片描述

      socket 以下的 UDP/TCP、IP、Channel 等即为内核网络协议栈;

    2. IPv4 套接字地址接口

    $ man 7 ip

    IPv4 套接字地址结构通常也称为“网际套接字地址结构”,以sockaddr_in命名,定义在 <netinet.h>中:

    struct sockaddr_in {
        sa_family_t    sin_family; /* address family: AF_INET */
        in_port_t      sin_port;   /* port in network byte order */
        struct in_addr sin_addr;   /* internet address */
    };
    
    /* Internet address. */
    struct in_addr {
        uint32_t       s_addr;     /* address in network byte order */
    };
    • AF_INET:代表的是 IPv4 协议;
      • 此外还有 Unix 域协议;
    • Network byte order:网络字节序;

    3. 通用地址结构

    使不同协议间的套接字地址兼容。

    struct sockaddr {
        uint8_t sin_len;
        sa_family_t sin_family;
        char sa_data[14];
    }
    • sin_len:整个 sockaddr 结构体的长度;
    • sin_family:指定该地址家族;
    • sa_data:由 sin_family 决定其形式;

    4. 字节序转换函数

    uint32_t htonl(uint32_t hostlong);
    uint16_t htons(uint16_t hostshort);
    uint32_t ntohl(uint32_t hostlong);
    uint16_t ntohs(uint16_t hostshort);
    • h:host,表示主机(主机字节序);
    • n:network,表示网络(网络字节序);
    • s:short,l:long
  • 相关阅读:
    教材全解
    知乎、博客园等开放API接口
    学习正则表达式就这么简单
    C#操作域用户ADHelper
    跨线程时使用静态扩展方法更新控件
    C#中的WinForm的消息机制简述,及消息机制下Invoke,和BeginInvoke的使用和区别
    WinForm 捕获异常 Application.ThreadException + AppDomain.CurrentDomain.UnhandledException
    Winform异常处理之ThreadException、unhandledException及多线程异常处理
    深入理解C#中的IDisposable接口
    批处理应用的几个技巧
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421268.html
Copyright © 2020-2023  润新知