MN316 OpenCPU丨TCP/UDP使用介绍

TCP/UDP是NB物联网通信中常用基础通信协议是TCP/IP协议的核心,属于传输层协议其中TCP面向连接可实现端到端可靠数据包发送UDP非面向连接数据流传输不完全可靠,无超时重发等机制,传输速度相对于UDP更快。

MN316 SDK采取移植开源LWIP TCP/UDP源码,客户可参照源码接口进行开发使用。本文将从使用流程图、函数接口、demo详解、demo运行演示、注意事项五个方面介绍了如何使用TCP和UDP功能。

  • 使用流程图

1MN316 OpenCPU TCP/UDP使用的常见流程及相关函数接口介绍。

图 1 TCP/UDP功能使用流程图

  • 函数接口介绍

1、 Sockaddr_in结构体

图 2 Sockaddr_in结构体

sin_len:sockaddr_in结构体长度;

sin_family:协议类型;

sin_port:通信端口;

sin_addr:通信IP地址。

2、 socket接口

图 3 Socket接口

2.1 domain参数

domain:协议参数,可理解为选择协议类型;

AF_INET:IPv4协议;

AF_INET6:IPv6协议。

demo配置的是IPV4协议,可根据实际使用情况配置IPV4/IPV6。

图 4 domain参数

2.2 type参数

可理解为选择创建socket类型。

SOCK_STREAM:提供面向连接的稳定数据传输socket类型,对应TCP;

SOCK_DGRAM: 使用不连续不可靠的数据包连接socket类型,对应UDP;

SOCK_RAW:创建原始套接字类型,实际使用较少,本文无需配置此种类型。

图 5 socket类型

2.3 protocol参数

可理解为选择对应通信协议类型。本文用到 IPPROTO_TCP 和IPPROTO_UDP 参数,对应TCP和UDP类型,也可配置为 IPPROTO_IP,会自动根据type配置的socket格式,使用对应默认协议。

图 6 protocol参数

3、 sendto接口

图 7 sendto接口

s对应创建返回的socket编号;

Dataptr:发送数据内容;

size :发送数据的长度;

flags :一般为0;

to :连接的ip地址和端口;

tolen :IP地址、端口长度。

4、 send接口

图 8 send接口

5、 recv接口

图 9 recv接口

s对应创建返回的socket编号;

mem 对应接收数据;

len 接收数据长度;

flags 一般为0。

6、 close接口

图 10 close接口

s对应创建返回的socket编号;

通过以上接口即可完成TCP/UDP的连接,收发数据及断开连接操作。

  • demo详解

1、创建socket

配置好需要通信的IP地址、端口,下行数据接收buffer等信息,再配置连接方式,进行socket创建。此处比SDK demo新增初始化i=10,循环10次,便于后面循环测试下行数据接收。

图 11 创建UDP socket

2、server_addr结构体赋值

赋值完成后,直接向指令地址和端口,发送UDP数据:udp network test。

图 12 发送UDP数据:udp network test

3、接收数据

阻塞判断是否有下行数据接收,通过FD_ISSET(socketid, &readfds)返回值,判断是否有事件发生,>0有事件发生,进行下行数据接收,最后断开连接。为了便于测试,增加了1个while循环,判断是否有数据下行。

图 13 接收数据程序

4、 TCP通信

流程与...基本一致,只是在发送数据上,不需要带IP地址和端口,不做重复说明。

图 14 TCP程序

  • demo运行及演示

1、固件编译

对SDK目录下的\examples\net\cm_demo_net.c 进行修改,改为自己的TCP服务器IP和端口,根据模组型号编译版本,build.bat+模组型号版本+demo进行编译,编译后进行固件烧录,最后进行测试。

图 15 固件编译

2、串口输入CM:UDP测试

图 16 UDP测试

从串口打印上可以看到模组建立UDP连接、上下行数据及socket关闭完整过程。

3、 串口输入CM:TCP测试

图 17TCP测试

39.144.3.183:52710 CONNECTED OK此包数据是我们测试服务器增加的,连接成功后会给模组下发连接成功消息,此消息和服务器有关,用户自行测试时可忽略。

  • 注意事项
  1. MN316仅支持2路socket创建;
  2. UDP单次允许发送最大发送数据是1500字节;
  3. 通信完成后,需进行socket关闭操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值