物联网LWIP之socket编程

04edd770d593661e991f78535ffe9eae.png

一,基础概念

在我看来Socket就相当于API,就是函数接口,我们使用Socket就可以在不清楚底层原理的基础上进行通信,即Socket会帮助我们处理好网络的Ip地址等。下图就清晰地展示了Socket的位置,作为用户层与其他层的交互媒介。

8d2575dd2fdc3f49a93270814798f77b.png

LWIP实现Socket需要操作系统的帮助,如下图所示。

6364e73bef54b26757c139da2a45daae.png

 二,Socket编程的基础知识

1.大端模式,小端模式

(1)大端模式就是尾端为高地址(先取低地址) 

7db49c2a301ede9e53706ee083f8776b.png

(2)小端模式就是尾端为低地址(先取高地址)

3bad228ced82b48a541aef7daf8d5c86.png

2.地址转换接口

Socket编程中会有特定的函数来处理IP地址,我们用户可以直接省略判断ip地址是大端还是小端,这个转换接口会自己判断地址存储方式并转换。

1.htonl与htons区别《大小端》
host —— to —— net——l :主机字节变为网络字节,字节为大端模式
host —— to —— net——s :主机字节变为网络字节,字节为小端模式


2.htonl与ntohl区别《主转网,网转主》
u_long b = htonl(a);//将主机字节的unsigned long转为网络字节顺序(32位)
u_long b = ntohl(a);//将网络字节顺序(32位)转为主机字节
//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)

==========

往期回顾:

国产芯片GD32与国产以太网芯片的坑

【蓝桥杯更新通知】

传输距离达到1500米的485电路

结构体与指针的关系

琢磨了一天的CAN协议

==========

作者:m0_61659911

平台:CSDN

链接:点击阅读原文

3db3614a49642f2b6a7b1372a14ad281.png

55e0aa96a5b4a682302f43aae137da3b.png

53a3dd86f7bd5884a7201c20f8ae8c79.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值