NB-IoT 通信之 TCP 收发数据 | 学习笔记

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

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

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


NB-IoT 通信之 TCP 收发数据

内容介绍:

一、 TCP 发送数据

二、 TCP 接收数据

三、小结

 

一、TCP 发送数据

直接看这个数据手册中 TCP 的发送流程:TCP 通信是在  UDP  的基础上只需要改动一些内容。首先 AT+NSOCR 是一样的,只需要把后半部分改为 STREAM,协议号改为 6;端口无具体要求, TCP 和  UDP  的端口是不冲突的,后面的还是设置只能接收。

对于 TCP 通信和  UDP  通信来说,学过网络编程的都知道,它最大的区别就是 TCP 是面向连接的,在发送数据之前一定要先连接上去。所以需要有一个连接指令,连接指令
就是 AT+NSOCO=? 。这里暂时写作 AT+NSOCO=1。把已有的连接的服务器、端口号 171.216.69.114.8088 给复制一下单独拿出来。

该情况下表示连接成功:如果返回的这个值为 connect ok 就表示连上了,连上了之后才能够去发数据。而且这个时候发的数据用户指令叫做 NSOSD 。IP 就不要了,因为在连接的时候已经指定过IP和端口了,连接之后就只写数据就好。
TCP 会用的多一些,因为  UDP  不太可靠, 相比较而言 TCP 是可靠的。

1.发送  TCP 数据

向目的 TCP 地址发送数据使用 +NSOSD 命令,发送之前需要首先保证与远程服务器的连接成功, AT 命令如下,

AT+NSOSD=,<length>,<data>[,<flag>[,sequence]]

例如:

AT+NSOSD=110.303132333435363738394 //发送数据 0123456789, 发送号为 4

1,10                    1# Socket 成功发送 10 BvtesTCP 数据

OK

这里两个参数可以不用填,打两个逗号省略掉就可以;还有一个就是发送的序列号,序列号填5、填6、填7、填8都可以,只是建议大家每包数据中不要填成一样的,就是要有所区分。

TCP 的接收数据的过程跟  UDP  是一样的,这里就不再重复,包括关闭也都是一样的,会了  UDP  ,  TCP 自然而然就也会了。
接下来看看  TCP 的 server,server 不是今天要讨论的重点,UDP  server 在发送数据的时候,独立发数据就有点问题。对于 TCP 也是一样的,创建套节制,然后监听这个端口,绑定然后设置监听队列,其中这里最多监听同时接入 30 个设备;接下来就开始鉴定了,提取连接的客户端 accept。首先是把它放到队列,然后把这个连接的客户端的信息给打印出来,比如说客户端的具体 IP、端口。

有关连接的客户端的数据收发,就交给了一个线程去做。

pthread create &threadid NULLclient process (void*)&

connfd);

pthread detach(thread id);/*

那 process 处理户端的这个数据,比如处理的时候从这个队列当中提取出一个文件描述符,然后去接收这个客户端的数据,接收之后把数据给打印出来,接下来把收到的数据以原样的形式再发回去。但是如果收到的数据是 bye bye,那就表示这个客户端就不能再出现了,即服务器断开了。但服务器是不断开的,这个跟 UDP 不太一样, UDP 是谁都可以给他发,哈因为他是面向无连接的,发完就不认识了。但是 TCP 的话,是有三次握手的,必须要说分才分,不说分是不分开的,一直建立起这种同性关系,即会有一个断开连接的过程.

图片5.png

同理,把这个服务器跑起来,刚才没有去讲编译,因为编译很简单,即 gcc-o;tcp_server; tcp _server.c-lpthread
变完后直接运行,跑一下就可以了。


二、TCP 接收数据

再来看另一边,首先第一步要创建套接字,点一下后又返为 1,也就是它这个系统ID 还是 1;第二步是连接服务器,连接跟发送据是两回事,稍等一下再看服务器这边,服务器这边还没有,能够看到 connect ok 则说明连接成功了,而服务器这边也打印出连接终端的信息。

图片6.png

TCP 的连接的这个时间就比 UDP 要长一些,这就是因为他要有三次握手,所需的时间就要长一点。当终端看到 CONNECT OK 的时候才能发出去,如果没有耐心的等待这段时间,数据是发不出去的。修改一下数据,改成 33 和 34。这里还是三个字节,然后这里后边的 5 是序列号。点一下发送,即发送了三个字节,新的 ID 是1。另一边收到了 34,其中必须要有这个提示 NSONMI,表示收到了三个字节,只有通过了这个新的 ID 维系,才能够点这个去接收。

图片7.png

本条是来自于这个服务器的端口。那这就是  TCP 的,通过这个方式一样可以断开。先不断开,再改一个内容,我们的服务器它可以收到 exit ,exit 的值可以查一下:
首先,e 为 16 进制 65;x 为 78;i 为 69;t 则是 74。即长度为 Exit 四个字节加一个结束符,一共五个字节。那这个序列号就改成 6,就跟上层包数据有个区分。再一次发送五个字节的数据。发完这个之后就退出了,就 break 了,然后就 close connect,服务器就断开了。再次确认,通过我们的信道 ID1 发了 5 个字节,看看服务器这边什么时候能收到这 5 个字节。而且收到了之后它就断开了,即再发数据就会失败。收到 exit 而且打印了 bye bye ,那也就是说服务器跟客户端这个时候就已经断开了,而且其实 NSOCLI 即为断开标志。已经断开了,再发数据就是错的,即 error了。点和不点都是可以的,就是都表示已经跟服务器断开,但是服务器跟客户端断开了,并不代表这个服务器不能接受别的数据。比如再创建再连接,还是可以的,服务器还是在运行着的。

三、小结

这就是 TCP 的通信, UDP 通信基本上就是三步;  TCP 通信就多了一步,而且 TCP 通信更可靠一些。PPT 上没有专门讲,直接看这个数据手册就好。中途如果说希望看到更多的调试信息的话,j即可按照以下指令输入:

1. AT+CMEE=1 (开启详细错误提示

>返回: OK

2. AT+NSMI=1(数据发送成功通知)

>返回: OK

3. >AT+NCDP=120.55.96.180,5683 (连接云平台申请成功的服务器,一般运营商会将此信息发送到申请者邮箱)

4. AT+NCDP?( 查看连接成功的IP和端口)

>返回:连接成功的 IP 和端口 120.55.96.180,5683

5. AT+NMGS=3,464748 (向服务器发送3字节数据

6. AT+NQMGS (查询发送状态)

>返回: PENDING=0,SENT=7,ERROR=0 呢就要把这个加上 At 加上 CM1 的东西

相关文章
|
3月前
|
传感器 物联网 5G
物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
物联网的一个重要的特点是接入了网络,因此这些设备才能将传感器采集的数据上传到云平台,然后根据平台对数据的分析做出反应。而这种接入网络的技术,就是通信技术,是物联网的基础之一。通信的方式可以分为有线和无线两种方式,因为有线通信的成本较高,无线通信技术在物联网中应用比较广泛。
179 1
|
2月前
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
33 1
|
11月前
|
消息中间件 传感器 监控
IoT企业物联网平台,数据服务开发实战
IoT企业物联网平台开发实战
378 0
|
9天前
|
存储 传感器 监控
理解并利用物联网(IoT)数据的技术探索
【8月更文挑战第11天】物联网数据是数字化转型的重要资源。通过深入理解物联网数据的特性和价值,并采取有效的收集、处理和分析策略,我们可以更好地利用这些数据为企业决策提供支持、优化运营效率、创造新的商业模式并推动数字化转型的深入发展。
|
1月前
|
网络协议 物联网 定位技术
毕设(二)——NB-IOT通信模块(nb卡通信测试)+gps定位
毕设(二)——NB-IOT通信模块(nb卡通信测试)+gps定位
|
2月前
|
机器学习/深度学习 传感器 算法
物联网(IoT)数据与机器学习的结合
【6月更文挑战第6天】物联网和机器学习加速融合,驱动数据收集与智能分析。通过机器学习算法处理 IoT 数据,实现智能家居、工业生产的智能化。示例代码展示如何用线性回归预测温度。结合带来的优势包括实时监测、预警、资源优化,但也面临数据质量、隐私安全、算法选择等挑战。未来需强化技术创新,应对挑战,推动社会智能化发展。
98 0
|
3月前
|
消息中间件 网络协议 算法
【计算机网络基础篇】学习笔记系列之一《TCP/IP 网络模型》
【计算机网络基础篇】学习笔记系列之一《TCP/IP 网络模型》
61 1
|
11月前
|
传感器 监控 数据可视化
手把手教你用IoT设备监控家庭环境数据
本实验带您体验如何通过六合一传感器(温度、湿度、二氧化碳、PM2.5、PM10、甲醛)实现家庭环境数据实时采集,并搭建可视化大屏实时监控。
439 0
|
网络协议
计算机通信地址【图解TCP/IP(笔记六)】
计算机通信地址【图解TCP/IP(笔记六)】
|
3月前
|
网络协议 开发者 Python
tcp/ip模型中,帧是第几层的数据单元?
在网络通信的世界中,TCP/IP模型以其高效和可靠性而著称。这个模型是现代互联网通信的基石,它定义了数据在网络中如何被传输和接收。其中,一个核心的概念是数据单元的层级,特别是“帧”在这个模型中的位置。今天,我们就来说一下TCP/IP模型中帧的概念,以及它作为数据单元在哪一层中扮演着关键角色。