赞
踩
TCP/UDP是NB物联网通信中常用基础通信协议,是TCP/IP协议的核心,属于传输层协议。其中TCP面向连接,可实现端到端可靠数据包发送;UDP非面向连接,数据流传输不完全可靠,无超时重发等机制,传输速度相对于UDP更快。
MN316 SDK采取移植开源LWIP TCP/UDP源码,客户可参照源码接口进行开发使用。本文将从使用流程图、函数接口、demo详解、demo运行演示、注意事项五个方面介绍了如何使用TCP和UDP功能。
图1为MN316 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的连接,收发数据及断开连接操作。
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程序
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此包数据是我们测试服务器增加的,连接成功后会给模组下发连接成功消息,此消息和服务器有关,用户自行测试时可忽略。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。