物联网lwIP网络开发 3.2Socket编程预备基础

Socket编程预备知识1

socket编程圣经书籍最权威
物联网lwIP网络开发 3.2Socket编程预备基础_第1张图片

大端模式和小端模式

物联网lwIP网络开发 3.2Socket编程预备基础_第2张图片

网络字节序

起源

物联网lwIP网络开发 3.2Socket编程预备基础_第3张图片

物联网lwIP网络开发 3.2Socket编程预备基础_第4张图片

地址转换接口

//def.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);

IP地址转换

socket 接口

af:网络模式ipv4 ipv6
src点分格式ip地址
dst 目标uint32或者64

//socket.h
int inet_pton(int af, const char *src, void *dst);
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

lwIP接口

针对ipv4

//inet.h
#define inet_addr(cp)                   ipaddr_addr(cp)
#define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t*)addr)
#define inet_ntoa(addr)                 ip4addr_ntoa((const ip4_addr_t*)&(addr))
#define inet_ntoa_r(addr, buf, buflen)  ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen)

Socket编程预备知识2

sockaddr数据结构

strcut sockaddr 很多网络编程函数诞生早于IPv4协议,那时候都使用的是sockaddr结构体,为了向前兼容,现在sockaddr退化成了(void *)的作用,传递一个地址给函数,至于这个函数是sockaddr_in还是sockaddr_in6,由地址族确定,然后函数内部再强制类型转化为所需的地址类型。

物联网lwIP网络开发 3.2Socket编程预备基础_第5张图片

sockaddr

struct sockaddr {
  u8_t        sa_len;
  sa_family_t sa_family;
  char        sa_data[14];
};

sockaddr_in

struct sockaddr_in {
  u8_t            sin_len;
  sa_family_t     sin_family;
  in_port_t       sin_port;
  struct in_addr  sin_addr;
#define SIN_ZERO_LEN 8
  char            sin_zero[SIN_ZERO_LEN];
};

sockaddr_in6

struct sockaddr_in6 {
  u8_t            sin6_len;      /* length of this structure    */
  sa_family_t     sin6_family;   /* AF_INET6                    */
  in_port_t       sin6_port;     /* Transport layer port #      */
  u32_t           sin6_flowinfo; /* IPv6 flow information       */
  struct in6_addr sin6_addr;     /* IPv6 address                */
  u32_t           sin6_scope_id; /* Set of interfaces for scope */
};

socklen_t

typedef u32_t socklen_t;

socket 编程模型

物联网lwIP网络开发 3.2Socket编程预备基础_第6张图片

你可能感兴趣的:(lwIP网络,网络,网络互联,网络通信,stm32)