一。Socket编程的基本概念
在我看来Socket就相当于API,就是函数接口,我们使用Socket就可以在不清楚底层原理的基础上进行通信,即Socket会帮助我们处理好网络的Ip地址等。下图就清晰的展示了Socket的位置,作为用户层与其他层的交互媒介。
LWIP实现Socket需要操作系统的帮助,如下图所示。
二。Socket编程的基础知识
1.大端模式,小端模式
(1)大端模式就是尾端为高地址(先取低地址)
(2)小端模式就是尾端为低地址(先取高地址)
2.地址转换接口
Socket编程中会有特定的函数来处理IP地址,我们用户可以直接省略判断ip地址是大端还是小端,这个转换接口会自己判断地址存储方式并转换。
//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);
3.IP地址转换
(1)socket接口
//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);
(2)LWIP接口
//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)
4.socket编程模型
补充:对上述部分函数进行分析
1.accept()