今天,我的导师又放我鸽子了。。看到他确实很忙。也有可能这个项目搁置或者废弃了吧,但我自己也要继续下去。于是,写下这第二篇文章。简要的回顾一下CoAP协议,全名Constrained

Application

Protocol,也就是说这是一个应用在受限制的设备上的,例如网络不佳,运算能力低下,存储能力低下的设备。

相对于MQTT和XMPP协议,这是一个年轻的,国内外应用极少的物联网协议,有前景,但需考量适用性。

不过截至目前,由于这个部门没有硬件资源,也不能去本楼层对面的无锡物联网部门,而且官网给的step_by_hand与正经demo差距很大,难上手,所以,难。

这不,我就来做实验了么。发现Maven很重要!本文未提及Maven,但是在官方的源代码看到很多pox.xml的文件

以下只是基本的客户端和服务器的展示,服务器中还需完整部署服务器和相应资源!以下有一半是自己所写,有误之处望指正!

客户端:

四个方法:

注意:只有服务器的资源部署了相应方法,才可以执行方法

部署后的截图:

1. GET:

URI uri = null;

//uri初始化

uri = new URI(args[0]);

//URI实例化,接收来自入口的uri

CoapClient client = new CoapClient(uri);

//CoAP客户端实例化

CoapResponse response = client.get();

//执行GET方法

System.out.println(response.getCode());

System.out.println(response.getOptions());

System.out.println(response.getResponseText());

//分别将响应码、选项、接收的字符输出

System.out.println(Utils.prettyPrint(response));

//建议使用此方式,规格化地将response全部信息打印出来

四个客户端未集成一个,所以每个都得写入口:

运行GetClient截图:

2. POST:

URI uri = null;

uri = new URI(args[0]);

CoapClient client = new CoapClient(uri);

//CoAP客户端实例化的过程

Scanner scan = new Scanner(System.in);

String inputChar = scan.nextLine();

String payload = inputChar;

//将键盘输入的payload初始化(非CoAP)

CoapResponse response = client.post(payload, TEXT_PLAIN);

//设置post的内容和内容的类型

System.out.println(response.getCode());

System.out.println(response.getOptions());

System.out.println(response.getResponseText());

System.out.println(Utils.prettyPrint(response));

//输出信息

3. PUT

URI uri = null;

uri = new URI(args[0]);

CoapClient client = new CoapClient(uri);

Scanner scan = new Scanner(System.in);

String inputChar = scan.nextLine();

String payload = inputChar;

// CoAP客户端实例化,并将键盘输入的payload初始化

CoapResponse response = client.put(payload, TEXT_PLAIN);

//设置put的内容和内容的类型

System.out.println(response.getCode());

System.out.println(response.getOptions());

System.out.println(response.getResponseText());

System.out.println(Utils.prettyPrint(response));

//输出信息

4. DELETE

URI uri = null;

uri = new URI(args[0]);

CoapClient client = new CoapClient(uri);

// CoAP客户端实例化

CoapResponse response = client.delete();

//执行delete方法

System.out.println(response.getCode());

System.out.println(response.getOptions());

System.out.println(response.getResponseText());

System.out.println(Utils.prettyPrint(response));

//输出信息

服务器:

以HelloCMRI为例:

四个方法:

此处用火狐浏览器以B/S的B  替代作C/S端的C端验证

1. GET:

exchange.respond(content);

//服务器向客户端返回内容content

2. POST:

String payload = exchange.getRequestText();

//从客户端接收字符,存入payload

Response response = new Response(ResponseCode.CREATED);

//实例化:

//客户端发出POST请求后,服务器向客户端返回CREATED码,

//客户端接收后呈现2.01Created和相应的延迟(ms)

response.getOptions().setLocationPath(resource.getURI());

//服务器向客户端返回路径

exchange.respond(CHANGED, exchange.getRequestText().toUpperCase(),

TEXT_PLAIN);

//服务器向客户端返回内容

3. PUT:

content = exchange.getRequestText();

//服务器从客户端获取字符并更新

exchange.respond(ResponseCode.CHANGED,content);

//服务器向客户端返回2.04Changed和延迟

4. DELETE:

this.delete();

//服务器执行删除操作

exchange.respond(ResponseCode.DELETED);

//服务器向客户端返回2.02Deleted和延迟

额外方法:

Observe模式:

getAttributes().setObservable();

//添加标记,使core在get时可以看到obs:true

setObservable(true);

//设置Observe属性

setObserveType(CoAP.Type.CON);

//设置Observe类型

体现存储能力:如上面server中的POST方法

体现计算能力:

斐波那契数列很有意思,像蜗牛似的,有兴趣的朋友可以结合图像理解

计算fibonacci number:

public void handleGET(CoapExchange exchange) {

int n = 20;

if (exchange.getRequestOptions().getURIQueryCount() > 0) {

try {

List queries = exchange.getRequestOptions().getUriQuery();

for (String query:queries) {

if (pattern.matcher(query).matches()) {

n = Integer.parseInt(query.split("=")[1]);

}

}

} catch (Exception e) {

e.printStackTrace();

exchange.respond(ResponseCode.BAD_REQUEST, e.getMessage());

return;

}

}

int fib = fibonacci(n);

exchange.respond("fibonacci("+n+") = "+fib);

}

private int fibonacci(int n) {

if (n <= 1) return n;

else return fibonacci(n-1) + fibonacci(n-2);

}

结果:

体现不良网络环境工作能力:未知。

java coap_CoAP协议-以Californium(Java)为例的CoAP初步实现相关推荐

  1. java ws协议_基于java实现websocket协议过程详解

    最近了解了下websocket和socket这个东西,说不得不来说下为何要使用 WebSocket ,和为何不用http. 为何需要WebSocket ? HTTP 协议是一种无状态的.无连接的.单向 ...

  2. 小米登录协议分析_性能测试篇之Loadrunner与ida工具结合完成java vuser协议的脚本...

    你这么优秀,一定只想把"柠檬班"置顶 ▲ → 性能3期优秀作业 利用lr的java vuser协议完成 (登录,md5加密完成重置支付密码,获取订单列表)请求,并加if判断完善脚本 ...

  3. Objective-C 入门(七)协议 protocol(JAVA中的接口)

    Objective-C 入门(七)协议 protocol(JAVA中的接口) 接口的作用想必大家都比较了解 OV中的 protocol 相比接口作用相似 语法稍有不同 1.先来看声明一个协议 在创建文 ...

  4. yar java_Yar 的传输协议学习以及 Java 版本的实现

    在 yar 中规定的传输协议如下图所示,请求体为82个字节的yar_header_t和8字节的打包名称和请求实体yar_request_t,在yar_header_t里面用body_len记录8字节的 ...

  5. Java URL协议扩展实现

    2019独角兽企业重金招聘Python工程师标准>>> Java URL协议扩展实现 博客分类: java 在信息交互系统设计中,不乏有自定义通讯协议设计.本章会介绍如何利用 jav ...

  6. Java多线程网络爬虫(时光网为例)

    目录 多线程简介 多线程网络爬虫 分析要爬的数据 网络抓包 爬虫框架 model MtimeThread主方法 MtimeParse解析数据 数据库操作 多线程简介 Java多线程实现方式主要有三种: ...

  7. java相关协议_java相关网络协议是什么

    能够有效保证我们上网安全的就是网络协议,那么java相关网络协议是什么?了解网络安全常识,首先就要了解佰佰安全网小编就带您认识一下吧. 1.概述 Java通过协议获取网络数据或者从设备上获取设备数据的 ...

  8. Java学习系列(十八)Java面向对象之基于UDP协议的网络通信

    UDP协议:无需建立虚拟链路,协议是不可靠的. A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达:但有些情况下,数据报可能会丢失 ...

  9. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  10. Java Mail---SMTP协议-Java发邮件(带附件)演示过程

    转载请注明出处: http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] JavaMail-API简介: 邮件客户端的主要任务是向邮件服务器发送邮件,以及接 ...

最新文章

  1. javascript 方法实例
  2. pring Boot与MyBatista的集成
  3. 使用Python+OpenCV+GAN实现车牌图像增强
  4. Windoes上安装(升级)虚拟化VMware Workstattion Pro软件、序列码激活软件
  5. 使用DBUtils编写通用的DAO
  6. Qt学习之路(28): 坐标变换
  7. 初中生学python教材推荐_推荐中学生看的几本书
  8. pthread_cond_signal只能唤醒已经处于pthread_cond_wait的线程
  9. 触摸屏与单片机通讯C语言程序,讲述如何实现单片机与触摸屏的通信
  10. 修改PC端微信提示音
  11. WES7 定制界面完整过程(去除所有windows标识)
  12. {转]太经典了,我不得不收藏
  13. vue中keep-alive、activated的探讨和使用
  14. android aar 自动引入依赖
  15. 腾讯地图、高德地图去除logo方法
  16. 华为鸿蒙福利群抢红包,成就红包第一抢!华为Mate S拒绝手慢无
  17. 狗狗有角膜溃疡怎么办?
  18. listen监听队列刨析
  19. Liang-GaRy啃linux书想吐(六)
  20. R语言散点图分类、配色、添加趋势线

热门文章

  1. 用python写一个双人对战版的中国象棋小游戏
  2. WPS和Office 字体乱码问题
  3. iOS面试题大全(附带答案)
  4. 耳挂式蓝牙耳机原理_一种耳挂式蓝牙耳机的制作方法
  5. 使用无线投屏软件将手机和电脑画面同步
  6. Kindle 3---原系统下的字典的使用
  7. Windows设置防火墙允许指定应用正常使用网络
  8. H264编码器与H265编码器对比
  9. 独创圆柱形投影,索尼高透光HOE全息显示方案详解
  10. 机器学习算法一之基于K均值聚类算法实现数据聚类及二维图像像素分割