zoukankan      html  css  js  c++  java
  • 套接口编程简介

    1、套接口地址结构

    POSIX规范只需要结构中的三个成员:sin_family、sin_addr、sin_port。其中sin_addr又是一个结构

    2、通用套接口地址结构

    套接口函数被定义为采用指向通用套接口地址结构的指针。由于套接口函数的定义并没有使用void*指针类型,

    所以调用套接口函数时必须进行强制类型转换。

    使用通用套接口地址结构的原因:内核必须依据通用套接口地址结,检查sin_family的值来确定结构的类型

    3、字节排序函数

    多字节数据在内存中存储有两种方法。小端字节序把低字节存储在起始地址;大端字节序高序字节存储在起始地址。

    POSIX规范规定,套接口地址结构中一些成员按网络字节序进行维护,所以必须注意主机字节序和网络字节序之间

    的转换。

    #include <netinet/in.h>

    返回网络字节序值

    uint16_t htons (uint16_t)

    uint32_t htonl (uint32_t)

    返回主机字节序值

    uint16_t ntohs (uint16_t)

    uint32_t ntohl (uint32_t)

    4、地址转换函数

    地址转换函数用于ASCII字符串和网络字节序的二进制值间转换地址

    #include <arpa/inet.h>

    int inet_aton(const char *strptr, struct in_addr *addrptr)

    把strptr所指的字符串转换为32位的网络字节序二进制值,把结果保存在addrptr中。成功返回1,失败返回0。

    in_addr_t inet_addr (const char *strptr)

    返回32位网络字节序二进制值。失败时返回一个常值INADDR_NONE(255.255.255.255),所以该函数不能处理

    点分十进制数串255.255.255.255

    char *inet_ntoa (struct in_addr inaddr)

    将32位网络字节序二进制值转换成点分十进制数串。

    下面两个转换函数对ipv4和ipv6地址都能处理。

    #include <arpa/inet.h>

    点分十进制到二进制转换

    int inet_pton (int family, const char *strptr, void *addrptr)

    二进制到点分十进制转换

    const char *inet_ntop (int family, const void *addrptr, char *strptr, size_t len)

    生活不止眼前的苟且 还有诗和远方的田野
  • 相关阅读:
    行为树AI设计及BehaviorTree结构分析
    Android填坑—Error:Execution failed for task ':app:transformClassesWithDexForRelease'
    编程练习-字母异位词分组
    编程练习-判断是否为易混淆数
    编程练习-寻找最长回文串
    Android 8悬浮窗适配
    编程练习-字符串展开
    编程练习-只用0交换排序数组
    Android工程方法数超过64k,The number of method references in a .dex file cannot exceed 64K.
    Eclipse项目导入到Android Studio中
  • 原文地址:https://www.cnblogs.com/jc-nogame/p/4347078.html
Copyright © 2011-2022 走看看