菜鸟江涛带你学最小物联网系统(外篇)——NB-IoT服务器搭建,基于CoAP协议的初次运行(多层级Path处理)

菜鸟江涛带你学最小物联网系统(外篇)——NB-IoT服务器搭建,基于CoAP协议的初次运行

本篇是承接上篇的补充部分,主要是记录Californium框架在使用中的一些坑。

1.问题场景描述

上篇讲了使用Californium如何搭建一个coap服务端和客户端的例子。在使用过程中我又遇到了问题,如下

例如我想访问:coap://127.0.0.1/devices/lock

按照上篇的描述:我在服务端增加了如下的写法,然后启动coap服务器,使用客户端进行访问

		// 资源1
		server.add(new CoapResource("devices/lock") {
			@Override
			public void handleGET(CoapExchange exchange) {
				System.out.println("lock -- "+exchange.toString());
				exchange.respond("devices connect!!");
			}
		});

 然后得到的结果是如下:

C:\Users\XYSM>java -jar C:\Users\XYSM\Desktop\client.jar coap://127.0.0.1/devices/lock
4.04
{}


ADVANCED

==[ CoAP Response ]============================================
MID    : 35548
Token  : [30515f270ceed804]
Type   : ACK
Status : 4.04
Options: {}
RTT    : 27 ms
Payload: 0 Bytes
===============================================================

应答码是4.04:表示服务器无法寻找到地址资源 ,说明咱们的路径有问题了!!!

然后我使用coap通用的访问路径 /.well-know/core 来查看支持的资源

C:\Users\XYSM>java -jar C:\Users\XYSM\Desktop\client.jar coap://127.0.0.1/.well-known/core
2.05
{"Content-Format":"application/link-format"}
</devices/lock>,</.well-known/core>

ADVANCED

==[ CoAP Response ]============================================
MID    : 7154
Token  : [10fa79aed6df420b]
Type   : ACK
Status : 2.05
Options: {"Content-Format":"application/link-format"}
RTT    : 13 ms
Payload: 35 Bytes
---------------------------------------------------------------
</devices/lock>,</.well-known/core>
===============================================================

赫然发现 /devices/lock 这个路径是存在的 ,但是为何一直报4.04错误呢????

问题原因:原来是Californium框架中的Uri-Path不支持“/” ,所以就得另辟蹊径了!!

2.解决方案

知道了问题的原因,我们就来看下框架上是如何实现的,其实从框架的源码中我们可以窥见一点端倪,如下:

 然后在Github仓库中我也找到了对应的解决方法,可以给大家做借鉴

其实就是一次add一层路径(CoapResources),多层路径要多次进行add !!当然我们也可以在对应的在每一层路径下,可以重写对应的处理方法。

改造下多层路径的写法,如下:

		// 资源1
		server.add(new CoapResource("devices").add(new CoapResource("lock") {
			@Override
			public void handleGET(CoapExchange exchange) {
				exchange.respond("devices lock online !");
			}
		}));

3.演示效果


好了,coap的多层路径访问就是这样了

NB-IoT现阶段访问一个服务器只能通过IP地址加端口的方式,省去了DNS解析,如果产品以后的IP变化或者改变了服务端的IP地址,就需要一个DNS解析的功能。 通过DNS解析某个域名的IP地址,获取到IP地址后再进行通信。 如果NB-IoT模块只能绑定一个IP,则可以通过这个IP先获取其他IP列表,然后统一经过这个IP进行转发。 参考: 1.1.2 NB卡准备 模组使用的SIM卡为中国电信物联网专用NB卡,如下图正面(留意NB字样,无此字样的均为不合法的NB卡): 背面(留意其ICCID号,在让运营商开放IP白名单时可能需要此号码,相当于手机卡的手机号): 重要:收到卡后,需要致电背面的客服电话, 使其将您自己的IP地址加入访问白名单,此一步完成后,方能进行下面的步骤,切记切记 。 如何判定服务器IP已被加入访问白名单,使用如下两种方式: 1. AT+NPING 指令,通过PING自己的服务器地址,如返回ERROR,则多半(尚需继续排除防火墙因素)未就绪; 2. UDP通讯,如能与自己的服务器直接连接UDP通讯,那可以证明一定就绪; 1.1.3 服务器准备  首先您需要有一个固定IP的公网服务器,由于目前BC95暂不支持域名解析,故必须使用IP地址配置方式。  服务器可以使用阿里云服务器,目前本CoAP端暂未开源,有Windows 32位、Windows 64位、Linux CentOS 6、CentOS 7的可执行文件,请暂时选择以上指定系统;  CoAP标准协议使用 UDP 5683 端口,当然您也可以自定义此端口,必须让防火墙放通UDP 的指定端口;  CoAP网关需要使用WEB方式进行设备管理、用户管理等,默认使用 TCP 8080 端口,同 理,防火墙必须放通此端口; 1.1.4 模组准备 推荐使用 串口调试助手 sscom 来调试NB模组,如下,首先将您的NB模组上电使其启动,使用AT指令能收到OK的回复,证明已启动完毕,按如下步骤进行: 基础配置 1. 配置 NCDP 服务器,使用的指令序列为 AT+CFUN=0 +NCDP=103.37.149.19,5683 AT+NRB 留意 IP 地址必须为您自己指定的IP地址,如果暂时没有,也可以用 如上 地址临时使用(但 WEB 设备管理地址也需换成这个IP),完成后重启了设备; 2. 等待设备附着网络后,使用 AT+NPING=103.37.149.19 尝试PING自己的服务器,当返回ERROR时,极有可能是 IP 白名单未成功配置的缘故; 3. 使用 AT+CGSN=1 查询设备 IMEI 号,并将设备的 IMEI 注册到 WEB 平台,如果在上面操作 过,可忽略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛声依旧Cjt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值