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

相关文章
|
5月前
|
Python
143 python网络编程 - UDP发送、接收数据
143 python网络编程 - UDP发送、接收数据
39 0
|
3月前
|
网络协议
网络编程-UDP协议(发送数据和接收数据)
网络编程-UDP协议(发送数据和接收数据)
|
1月前
|
网络协议 Java
Java——UDP数据报
Java——UDP数据报
12 0
|
1月前
|
网络协议 数据格式
|
7月前
|
网络协议 Java
Java UDP通信详解
UDP(User Datagram Protocol)是一种无连接的网络传输协议,它不像TCP那样需要建立连接和维护状态,因此更加轻量级。UDP适用于那些对数据传输的实时性要求较高,可以容忍一定数据丢失的场景。本文将详细介绍Java中如何使用UDP协议进行网络通信,包括UDP套接字、数据传输、服务器和客户端的创建等。
132 0
|
8月前
|
Python
【从零学习python 】73. UDP网络程序-发送数据
【从零学习python 】73. UDP网络程序-发送数据
46 0
|
4月前
UDP通信程序练习(实现模拟聊天室)
UDP通信程序练习(实现模拟聊天室)
39 0
|
4月前
|
存储 网络协议 Java
UDP通信程序的详细解析
2.UDP通信程序 2.1 UDP发送数据 Java中的UDP通信 UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念
41 0
|
4月前
|
C语言
UDP通信原理及网络编程
UDP通信原理及网络编程
51 0
|
5月前
|
Ubuntu Python Windows
142 python网络编程 - UDP发送数据
142 python网络编程 - UDP发送数据
35 0