NB-IoT使用笔记(4)在linux下使用搭建CoAP服务
来源:互联网 发布:bgm是什么意思网络用语 编辑:程序博客网 时间:2024/05/16 10:01
背景
NB-IoT模块有一个CoAP的功能,CoAP是基于UDP协议的一种带有重传机制的事务处理机制的应用层传输协议。关于CoAP的更多介绍,可以参照这个物联网学习笔记系列里面关于CoAP的文章,应该足够用了。
今天主要是在linux平台上搭建一个CoAP并进行简答的测试,主要参考博客CoAP学习笔记——nodeJS node-coap安装和使用(Linux平台) - 物联网 IoT 经验分享小站 - CSDN博客和CoAP协议学习——CoAP基础 - 物联网 IoT 经验分享小站 - CSDN博客。
预备知识
关于CoAP的官方介绍(英文版)的可以移步RFC 7252 The Constrained Application Protocol (CoAP)
以下是我认为的一些CoAP的重要特点:
- 数据包长度小,最小可以达到4字节。
- 采用请求响应的工作模式,共有4中消息类型:
- CON(Confirmable):需要被确认的请求,必须做出响应;
- NON( Non-confirmable):无需确认的请求,不必做响应的消息;
- ACK(Acknowledgement):应答消息,用于应答CON消息;
- RST(Reset):复位消息,当接收方接收到有错误的CON或者NON消息后用于重置收发,或者是在接收方重启时发送。
- 数据包结构:
- Ver(Version):版本信息,2bit,标明CoAP的版本;
- T(Type):消息类型,2bit,从0到3分别是CON、NON、ACK和RST;
- TKL(Token Length):标记长度,4bit,可变长度的token区域(0~8字节)长度;
- Code:消息类型2,8bit,3bit指明几个大类,剩下的5bit是对细节的描述,详情可以看官方的说明;
- Message ID:消息ID,16bit,匹配一次会话所有消息的唯一ID;
- token:标记,由TKL指定长度,标记ID;
- payload:有效载荷(可选项);
- CoAP的URL,类似http,以coap开头,默认端口号5683;
- CoAP观察者模式:CoAP客户端可以以观察者的身份连接到服务端,在客户端发送RST请求前,服务端会把最新的数据变化发送给客户端而不需要客户端不停地请求。
- CoAP块传输:CoAP可以对数据进行分片和组装,以适应大规模数据的传输。
- 支持4种请求方式:GET请求、POST请求、PUT请求和DELETE请求。
搭建与测试
通常的CoAP有node-coap和libcoap两种,这里安装的是node-coap。
安装nodeJS环境
查看机器类型
uname -a
返回
Linux VM_127_26_centos 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
可以看到我的是x86_64的CPU,将目录转到你想下载安装包的地方,这里直接下载已经编译好的安装包,然后下载https://nodejs.org/download/release/latest-v6.x/(当然也可以下载最新的版本v7、v8)中的对应你自己CPU的版本,并建立链接:
wget https://nodejs.org/download/release/latest-v6.x/node-v6.11.5-linux-x64.tar.gztar xvf node-v6.11.5-linux-x64.tar.gzln -s node-v6.11.5-linux-x64/bin/node /usr/local/bin/nodeln -s node-v6.11.5-linux-x64/bin/npm /usr/local/bin/npm
测试下运行:
node -v && npm -version
返回
v6.11.53.10.10
安装node-coap
npm install coap --save
已经装完了,没错~简单无脑,这里来写个JS测试下服务器:
vim server.js
内容如下:
const coap = require('../') // or coap , server = coap.createServer()server.on('request', function(req, res) { res.end('Hello ' + req.url.split('/')[1] + '\n')})server.listen(function() { console.log('server started')})
然后执行:
node server.js &
这样服务器就okay了,更多的应用可以去GitHub - mcollina/node-coap:CoAP - Node.js style
客户端访问测试
可以用coap客户端进行访问了,这里给出三种方法访问:Firefox浏览器的copper插件、coap-cli和js脚本。
Firefox浏览器
安装了Firefox后可以去Copper(Cu)::Adds-ons for Firefox ,点Adds to Firefox就安装好了。
安装成功后浏览器地址栏输入 about::addons可以看到Copper已经安装成功了。
最后在地址栏输入 coap:://(服务器的IP地址):5683/ ,点击GET可以看到服务器返回了Hello。
coap-cli
coap-cli这个可以在服务器上或者linux环境下使用命令行工具coap以客户端的身份连接到服务端
安装coap-cli,并设置软链接:
npm install coap-cli -gln -s ln -s node-v6.11.5-linux-x64/lib/node_modules/coap-cli/index.js /usr/local/bin/coap
发送测试GET数据:
coap get coap://localhost/a166865995
返回:
(2.05) Hello a166865995
(2.05)可理解为HTTP中的200 OK。关于coap-cli的更多细节可以移步GitHub - mcollina/coap-cli: A command line interface for CoAP built on node-coap。
js脚本
编辑客户端脚本:
vim client.js
内容:
const coap = require('coap') , req = coap.request('coap://localhost/a1668659995')req.on('response', function(res) { res.pipe(process.stdout)})req.end()
执行并返回结果:
node client.jsHello a1668659995
初入CoAP,欢迎小伙伴们一起评论区交流,一起学习~
转载请注明出处
- NB-IoT使用笔记(4)在linux下使用搭建CoAP服务
- NB-IoT使用笔记(6)在linux下使用搭建CoAP服务(2)
- NB-IoT使用笔记(3)在linux下使用python搭建UDP服务
- NB-IoT使用笔记(5)在linux下用python搭建UDP转发服务器扩展NB可访问IP个数
- NB-IoT使用笔记(2)实现UDP访问DNS服务获取IP地址(2)
- NB-IoT使用笔记(1)实现UDP访问DNS服务获取IP地址
- NB IoT中 CDP服务与CoAP关系解释
- NB-IoT使用场景
- NB-IOT使用小结
- NB-IoT移远BC95调试笔记 02 CoAP协议
- CoAP学习笔记——nodeJS node-coap安装和使用(Linux平台)
- NB-IoT和LoRa使用的频谱
- CoAP学习笔记——nodeJS node-coap安装和使用(windows平台)
- 在Linux下使用subversion搭建项目
- NB-IOT基础模型搭建思路
- 如何在Linux使用Eclipse +&nb…
- nb-iot
- 使用OpenVPN搭建Linux下的VPN服务
- 学习笔记:Deep Neural Networks Segment Neuronal Membranes in Electron Microscopy Image
- HDU-1622 树的建&&立层次遍历 bug
- 二 微信打飞机
- poj1260——pearls
- 图片referer防盗链 python3
- NB-IoT使用笔记(4)在linux下使用搭建CoAP服务
- SSH整合
- 我的第二篇博客
- 第三章 1+2+..+n<8888的最大整数n
- 14.1 保护HTTP的安全
- 中小型互联网公司微服务实践-经验和教训
- mysql Access denied for user root@localhost错误解决方法总结 原创 2016年07月06日 17:00:40 41843 问题重现(以下讨论范围仅限Windo
- VMware中CENTOS7中NAT设置连网,以及NAT服务自动终止
- Ubuntu16.04 hadoop2.7.3 伪分布配置