NB-loT 通信之 UDP 收发数据 | 学习笔记

简介: 快速学习 NB-loT 通信之 UDP 收发数据

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:NB-loT 通信之 UDP 收发数据】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11193


NB-loT 通信之 UDP 收发数据

接下来介绍 NB-loT 的几种通信方式,首先介绍最简单的 UDP 的方式。UDP 的通信方式只需要三步就可以了。

 

一、创建 UDP

1.如果对这个指令不熟悉,可以通过 M5310-A 文件,文件中有所有关于此文件的内容。DUC 属于 M5310-A TCPIP,打开应用指导

image.png

其他初始化不再讨论

2.创建指令:AT+NSOCR=<type>,<protocol>,<listen port>,<receive control>

在传微调助手中输入“AT+NSOCR=DGRAM,17,8888,1”

image.png

NSOCR 是命令,第一个参数 DGRAM 是通讯起源译,指的是 UDP。如果是 TCP 的话参数会变成 STREAM。17 代表着 UDP 的协议号如果是 TCP 的话他的协议号为 6。8888 代表 UDP 的端口号,(需要注意的是这个参数不代表服务器的端口而是通信终端自身的端口。端口是动态的,设置为多少都行,除了这些知名端口外最好设置成 1024 之后的。)1 代表允许接收他的下线数据。返回值代表着创建成功的信道ID。

3.实现数据的发送

输入:“AT+NSOSD=0,120,55,98,180,5000,2,3132”

需要注意的是:不能在自己的电脑上搭一个局网的服务器,因为移动终端是公网的移动设备无法发送到局域网中。可以买一个代理或者注册一个花生壳。如果用的是电信网络,这种情况下一般有公网 IP。

比如:网址“192.168.1.1”,(用中国电信的话普通用户不行,需改为超级用户,密码需问运营商要。)

登陆过后:

①点击应用

image.png

②点击高级 NAT 配置

image.png

③点击虚拟主机配置

image.png

④映射服务器 IP

image.png

映射的服务器 IP 为 13,因为虚拟机在当前内网中是 13,映射到外网,端口是8088,通过 8088 端口可以找到内网主机。外网开了 100 个端口(8000-8100),设置完后保存。如要知道NB的终端如何找到内网的 13 号主机需找运营商开放公网IP 才行。开放公网 IP 不是固定的,如要固定需收费。主要链接家里 WiFi,就会查到公网 IP。

4、替换数据

得到 IP 后将 IP 信息和端口替换进“AT+NSOSD=0,120,55,98,180,5000,2,3132”

因为信道 ID 的返回值为 1,所以要把“0”替换为“1”,IP 改为公网 IP,端口为路由器里面映射的端口,假设发送内容为 3 个字节,发送内容为 313200。为:“AT+NSOSD=1,171,216,89,114,8088,3,313200”,16 进制的 31 为 1,16 进制的 32 为 2,00 表示把字符 12 打印出来。

但是把字符串发给服务器,服务器 不一定能接收到,因此要启动一个服务端的程序,以下为解决方案:

①创建一个语句

image.png

接收到 IP,端口号以及内容后将其打印出来

image.png

接收到内容之后客户端的端口就不会为 0,如果不为 0 可以通过 sendto 把接收到的数据原样的发回到客户端,也就是说,当服务器发送 1,2 后也会收到一个 1,2。

image.png

服务器也可以主动发,线程中如果端口有获得可以从终端获取数据然后再发送,也可以发送原样的数据,类似 echo

image.png

②运行

image.png

UDP 是一种面向无连接的通信,TCP 是面向连接的,UDP 链接和发数据是一条指令完成的。运行后返回值为 1,3 分别表示信道 ID 和字节数,终端 IP:218.204.252.121,端口“64148”为动态数据并非固定,“12”为发送的内容,发完数据终端不是马上会收到,有信号延迟。当收到“+NSONMI”时“1”表示信道 ID“2”表示数据长度

③提取:

通过指令:“AT+NSORF=0,4”,“0”是信道ID“4”表示长度(长度写多少都行,但不能比接收的数据短),向终端发送数据,发送 abcd 四个字节。

image.png

当出现没有接收到数据时可能是服务器一端已经断开,需要再发一次数据,提示后马上发送 abcd,仍没收到数据,说明服务器下行有问题。

重新启动,再发一次数据,发现之前回的数据收到了,但手动输入的没有收到。说明不是终端问题,是服务器的程序问题。

image.png

可以将收到的每个字节加个“1”再回到“sendto”中。

image.png

UDP 能发也可以收,服务器手动发数据不需要讨论,echo 的数据是可以收到的。

如果想要再次创建同样的端口需要通过“AT+NSOCL=0”指令关闭 UDP SOCKET再创建,值不一定是 0,信道 ID 就可以,关闭信道就可以继续创建,否则要重新启动一个新窗口。

image.png

相关文章
|
7月前
|
存储 Python
Python网络编程基础(Socket编程) UDP 发送和接收数据
【4月更文挑战第10天】对于UDP客户端而言,发送数据是一个相对简单的过程。首先,你需要构建一个要发送的数据报,这通常是一个字节串(bytes)。然后,你可以调用socket对象的`sendto`方法,将数据报发送到指定的服务器地址和端口。
|
27天前
|
API 网络安全
发送UDP数据免费API接口教程
此API用于向指定主机发送UDP数据,支持POST或GET请求。需提供用户ID、密钥、接收IP及端口、数据内容等参数。返回状态码和信息提示。示例中含公共ID与KEY,建议使用个人凭证以提高调用频率。
45 13
|
2月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
52 0
Linux C/C++之TCP / UDP通信
|
7月前
|
网络协议 算法 Java
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
86 3
|
3月前
|
C语言
C语言 网络编程(七)UDP通信创建流程
本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
|
4月前
|
网络协议 数据处理 C语言
网络编程进阶:UDP通信
网络编程进阶:UDP通信
261 0
|
5月前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
227 1
|
5月前
|
网络协议 Java 数据处理
(一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述
就目前而言,多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述,但其中太多理论概念,对于大部分开发者而言,用途甚微。因此,在本系列中则会以实际开发者的工作为核心,从Java程序员的角度出发,详细解读Java的网络编程核心内容。
108 0
|
7月前
|
网络协议 安全 Java
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
68 1
网络编程、网络编程的三要素、TCP/UDP通信、三次握手和四次挥手
|
6月前
UDP通信
UDP通信
40 1