【OpenCPU】MN316-DLVD丨TCP/UDP使用介绍

菩禔看科技2024-04-21 12:51:19  135

TCP/UDP

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的连接,收发数据及断开连接操作。

三、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 接收数据程序-01

图 13 接收数据程序-02

4、 TCP通信

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

图 14 TCP程序

四、demo运行及演示

1、固件编译

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

图 15 固件编译

2、串口输入CM:UDP测试

图 16 UDP测试

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

3、 串口输入CM:TCP测试

图 17 TCP测试

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

五、注意事项

1、MN316仅支持2路socket创建;

2、UDP单次允许发送最大发送数据是1500字节;

3、通信完成后,需进行socket关闭操作。

转载自中移物联网,仅供模组品牌对应于中移物联网模组体系参考。

声明:《菩禔物联》所发表内容均为原创,所有原创内容仅用于交流,不代表任何立场和观点。极少数优才文章注明来源的,版权归原出处所有(无法查证版权的或未注明出处的均来源于网络搜集)。如有侵权,请联系我们删除或更改。内容的真实性、准确性和合法性由原作者负责。转载内容(视频、文章、广告等)只以信息传播为目的,仅供参考,不代表本平台认同其观点和立场。

The content published in the Bodhi Union of Things is original, and all original content is for communication purposes only and does not represent any position or viewpoint. A very small number of excellent talent articles indicate their source, and the copyright belongs to the original source (those that cannot be verified or whose source is not indicated are all collected online). If there is any infringement, please contact us to delete or make changes. The authenticity, accuracy, and legality of the content are the responsibility of the original author. The reprinted content (videos, articles, advertisements, etc.) is only for the purpose of information dissemination and is for reference only. It does not mean that this platform agrees with its views and positions.

转载此文是出于传递更多信息目的。若来源标注错误或侵犯了您的合法权益,请与本站联系,我们将及时更正、删除、谢谢。
https://www.414w.com/read/289072.html
0
最新回复(0)