物联网协议之COAP简介及Java实践

这篇具有很好参考价值的文章主要介绍了物联网协议之COAP简介及Java实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、COAP简介

1、关于COAP

 2、COAP特点

3、基于COAP的NB-IoT接入流程

二、CoAP协议JAVA实践

1、californium介绍

2、Java集成 

3、Maven 资源引入

4、定义Server端

5、Client调用

6、运行测试

总结


前言

        今天平安夜,祝大家圣诞快乐,平平安安。最近几年,随着物联网的兴起,很多设备都已经可以实现互联互通。相信很多从事安防、智慧城市、智能家居、智慧农业、应急消防、自然资源行业的朋友们,物联网已经是很成熟的技术了。很多的摄像头、传感器、计量水表、电表、燃气表、湿度传感器等等设备不仅可以支持实时的上传数据,还可以跟物联网平台进行互联互通,接收服务端的指令并进行执行相应操作。

        在实现物联网设备和互联网连接的过程中,除了基础的网络通信保障,还有一个重要的基础设施,就是物联网协议。相信大家对协议都不陌生,从TCP/IP、UDP,从HTTP、MQTT、COAP,很多的协议在我们日常的工作当中,当然更多使用的是HTTP协议。关于协议,很多书籍都已经讲解得非常详细。

        本文将围绕物联网的COAP协议,首先对其进行简单介绍,然后基于JAVA语言来进行COAP协议通讯编程实战,帮助大家对COAP有一个简单的认知,经过编程实践掌握协议的通信机制。

一、COAP简介

        为了让不熟悉COAP协议的读者在读这篇博文时,不至于不知道COAP是什么?因为还是在此对COAP进行一个简单的介绍,让每个读者都有一个直观的认识。如果对COAP非常熟悉的朋友,可以略过,直接进入后面的编程实战环节。

1、关于COAP

        CoAP(Constrained Application Protocol,受限应用协议)是一种专为物联网(IoT)设备和资源受限网络设计的应用层协议。它的诞生也是由于物联网设备大多都是资源限制型的,比如 CPU、RAM、Flash、网络宽带等;对于这类设备来说,想要直接使用现有网络的TCP和HTTP来实现设备信息交换是不现实的,为了让这部分设备能够顺利接入网络,CoAP 协议因此诞生。

物联网协议之COAP简介及Java实践,java,中间件,物联网,Java CoAP实现,californium

 2、COAP特点

序号 特点 说明
1 轻量级 CoAP协议非常简单,头部和选项字段较少,占用网络带宽和资源较少。
2 基于UDP 基于UDP运行,使得更适用于无连接、低延迟和高效率的通信,通过CoAP的CON(Confirmable)和ACK(Acknowledgment)消息实现可靠性传输。
3 类Restful架构 采用类RESTful架构风格,支持GET、POST、PUT和DELETE等常用的HTTP方法(有所区分),以进行资源的读取、创建、更新和删除。
4 低能耗、低带宽 对资源受限设备和网络进行优化,具有低能耗和低带宽消耗的特性。
5 资源标识符 使用统一资源标识符(URI)来标识资源
6 IP多播 允许一对多的通信,对物联网中的多个设备同时接收非常有用
7 可扩展性 允许在消息头中包含自定义选项,以满足特定应用的需求,可扩展性高。

3、基于COAP的NB-IoT接入流程

物联网协议之COAP简介及Java实践,java,中间件,物联网,Java CoAP实现,californium

         上图是某云基于Coap的NB-IoT的数据接入框架,这也是当前很多物联网平台接入的架构(可供参考),是一种比较容易实现的方式。

序号 描述
1 在设备端NB-IoT模块中,集成物联网平台SDK。厂商在物联网平台控制台申请设备证书(ProductKey、DeviceName和DeviceSecret)并烧录到设备中。
2 NB-IoT设备通过运营商的蜂窝网络进行入网。需要联系当地运营商,确保设备所属地区已经覆盖NB网络,并已具备NB-IoT入网能力。
3 设备入网成功后,NB设备产生的流量数据及产生的费用数据,将由运营商的M2M平台管理。此部分平台能力由运营商提供。
4 设备开发者可通过CoAP/UDP协议,将设备采集的实时数据上报到云物联网平台,借助物联网平台,实现海量亿级设备的安全连接和数据管理能力。并且,可通过规则引擎,将数据转发至大数据产品、云数据库、表格存储等服务中进行处理。
5 物联网平台提供相关的数据开放接口和消息推送服务,可将数据转发到业务服务器中,实现设备资产与实际应用的快速集成。

二、CoAP协议JAVA实践

        协议一般与编程语言无关。因此,您可以使用熟悉的技术栈来进行实现即可,这里以作者熟悉的Java语言为例,简单的介绍适用Java进行CoAP的协议开发。采用Java实现的原因很简单,基于Java良好的生态,有一款基于Java开发的CoAP协议实现框架californium,基于这个框架可以快速实现CoAP的Server端和Client的开发,帮助我们快速实现物联网业务。

1、californium介绍

        Californium框架是一款基于Java实现的Coap技术框架,californium官网地址,该项目实现了Coap协议的各种请求响应定义,支持CON/NON不同的可靠性传输模式。Californium 基于分层设计且高度可扩展。Californium三层架构如下:

        1 网络层:负责处理端口监听,网络数据收发;

        2 协议层:负责Coap协议数据包解析及封装,实现消息的路由、可靠性传输、Token处理、观察者模型;

        3 逻辑层:负责 Resource定义和映射,一个Resource 对应一个URL,可独立实现Coap 请求处理。可以将resource是一个controller。

物联网协议之COAP简介及Java实践,java,中间件,物联网,Java CoAP实现,californium

2、Java集成 

        实现申明,在这里,我们使用californium的版本是2.0.x版本,使用2.0版本是因为在3的版本中座了优化和调整,导致有一些配置需要重写。为了保证最简单的实现,我们用2.0作为示例例子,下次可以说明一下在更高级的版本中如何使用。

        Java开发环境软件说明:

        Eclipse、Jdk1.8、Maven3.3.9、californium 2.0.0-M7

3、Maven 资源引入

        首先新建一个Maven工程,在Pom.xml中引入所需要的资源jar包。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yelangking</groupId>
  <artifactId>californium-client-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
	<dependency>
		<groupId>org.eclipse.californium</groupId>
		<artifactId>californium-core</artifactId>
		<version>2.0.0-M7</version>
	</dependency>
	<dependency>
		<groupId>org.eclipse.californium</groupId>
		<artifactId>element-connector</artifactId>
		<version>2.0.0-M7</version>
	</dependency>
	<dependency>
		<groupId>org.eclipse.californium</groupId>
		<artifactId>scandium</artifactId>
		<version>2.0.0-M7</version>
	</dependency>
</dependencies>
</project>

4、定义Server端

        基于californium的server端开发,其实非常简单。关键代码如下:

package com.yelagking;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.eclipse.californium.core.CoapResource;
import org.eclipse.californium.core.CoapServer;
import org.eclipse.californium.core.coap.CoAP.ResponseCode;
import org.eclipse.californium.core.server.resources.CoapExchange;

public class HelloCoAPServer {

	public static void main(String[] args) {
		CoapServer server = new CoapServer();// 主机为localhost 端口为默认端口5683
		server.add(new CoapResource("hello") {// 创建一个资源为hello 请求格式为 主机:端口\hello
			@Override
			public void handleGET(CoapExchange exchange) { // 重写处理GET请求的方法
				exchange.respond(ResponseCode.CONTENT, "Hello CoAP!This is from Java coap server");
			}
		});
		server.add(new CoapResource("time") { // 创建一个资源为time 请求格式为 主机:端口\time
			@Override
			public void handleGET(CoapExchange exchange) {
				Date date = new Date();
				exchange.respond(ResponseCode.CONTENT, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
			}
		});
		server.start();
	}
}

        在上面的代码中,相当与定义了两个controller,分别为hello和time,在类里面,开放了一个get访问接口(相当于是restful的get)。在实际业务中,我们可以在get里面做业务逻辑了,比如把接收到的数据进行入库,或者把执行命令一起推送给下游的设备端。

server.add(new CoapResource("hello") {// 创建一个资源为hello 请求格式为 主机:端口\hello
			@Override
			public void handleGET(CoapExchange exchange) { // 重写处理GET请求的方法
				exchange.respond(ResponseCode.CONTENT, "Hello CoAP!This is from Java coap server");
			}
		});

5、Client调用

        有了服务端之后,我们再进行客户端的开发。由于是示例,并未做分离部署,及客户端和服务端在一台机器上,实际情况下肯定是需要分开的。关键代码如下:

package com.yelangking;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.eclipse.californium.core.CoapClient;
import org.eclipse.californium.core.CoapResponse;
import org.eclipse.californium.core.Utils;
import org.eclipse.californium.core.coap.MediaTypeRegistry;

public class ClientTest {

	public static void main(String[] args) throws URISyntaxException, IOException {
		URI uri = null;
		uri = new URI("coap://localhost:5683/hello"); // 创建一个资源请求hello资源,注意默认端口为5683
		//uri = new URI("coap://127.0.0.1:5683/core/time?type=1");
		CoapClient client = new CoapClient(uri);
		CoapResponse response = client.get();
		if (response != null) {
			System.out.println(response.getCode()); // 打印请求状态码
			System.out.println(response.getOptions()); // 选项参数
			System.out.println(response.getResponseText()); // 获取内容文本信息
			System.out.println("\nAdvanced\n"); //
			System.out.println(Utils.prettyPrint(response)); // 打印格式良好的输出
		}

	}

}

6、运行测试

        在编写完server端和client端代码后,我们分别来测试一下是否可用,以及通过client调用server,是否有请求报文。首先将Server端启动起来。

物联网协议之COAP简介及Java实践,java,中间件,物联网,Java CoAP实现,californium

        然后再启动client,同时访问hello接口,测试能否从接口中获取数据。运行main函数后,发现控制台有以下输出:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2.05
{"Content-Format":"text/plain"}
Hello CoAP!This is from Java coap server

Advanced

==[ CoAP Response ]============================================
MID    : 59202
Token  : [d845e70ed6398b48]
Type   : ACK
Status : 2.05
Options: {"Content-Format":"text/plain"}
RTT    : 51 ms
Payload: 40 Bytes
---------------------------------------------------------------
Hello CoAP!This is from Java coap server
===============================================================

物联网协议之COAP简介及Java实践,java,中间件,物联网,Java CoAP实现,californium

        可以看到,client成功发起了一个get请求,server端正常接收请求,并返回了相应。一次CoAP的协议调用过程实例就成功了。

总结

        以上就是本文的主要内容,本文将围绕物联网的COAP协议,首先对其进行简单介绍,然后基于JAVA语言来进行COAP协议通讯编程实战,帮助大家对COAP有一个简单的认知,经过编程实践掌握协议的通信机制。

本文部分插图参考网络资源,原文地址:

1、Coap协议和Californium框架使用示例。

2、CoAP连接通信。文章来源地址https://www.toymoban.com/news/detail-765416.html

到了这里,关于物联网协议之COAP简介及Java实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网协议Coap之Californium CoapServer解析

    目录 前言 一、CoapServer对象 1、类对象定义 2、ServerInterface接口 3、CoapServer对象  二、CoapServer服务运行分析 1、CoapServer对象实例化 1.1 调用构造方法 1.2 生成全局配置 1.3 创建Resource对象 1.4-1.8、配置消息传递器、添加CoapResource 1.9-1.12 创建线程池 1.3-1.7 端口绑定、服务配置 2、添

    2024年02月04日
    浏览(32)
  • Java 缓存中间件

    :Spring Cache、J2Cache、JetCache JSR107 中制订了 Java 缓存的规范。 因此,在很多缓存框架、缓存库中,其 API 都参考了 JSR 107 规范。 img Java Caching 定义了 5 个核心接口 CachingProvider - 定义了创建、配置、获取、管理和控制多个 CacheManager 。一个应用可以在运行期访问多个 Cac

    2024年02月04日
    浏览(48)
  • Java中间件-Elasticsearch

    Elasticsearch 是一个非常强大的搜索引擎。它目前被广泛地使用于各个 IT 公司。Elasticsearch 是由 Elastic 公司创建。它的代码位于 GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine。目前,Elasticsearch 是一个免费及开放(free and open)的项目。同时,Elastic 公司也拥有

    2023年04月27日
    浏览(48)
  • 【Java中间件】RocketMQ

    Message Queue,是一种提供消息队列服务的中间件。提供了消息生产、存储、消费全过程API的软件系统。 MQ的作用 限流削峰:当用户发送超量请求时,将请求暂存,以便后期慢慢处理。如果不使用MQ暂存直接请求到业务系统中容易引起系统崩溃。 异步解耦:若上游系统和下游系

    2024年02月15日
    浏览(45)
  • Java高可用监控中间件

    Prometheus是一个开源的系统监控和警报工具集,用于收集、存储和查询时间序列数据。 它支持多种数据源,可以监控分布式系统的各种指标,并提供强大的查询语言和灵活的警报规则。 Grafana是一个开源的可视化监控和分析平台,可以与多个数据源集成,包括Prometheus、InfluxD

    2024年01月23日
    浏览(47)
  • 【Java面试丨消息中间件】Kafka

    1. 介绍 使用kafka在消息的收发过程都有可能会出现消息丢失 (1)生产者发送消息到broker丢失 (2)消息在broker中存储丢失 (3)消费者从broker接收消息丢失 2. 生产者发送消息到broker丢失 设置异步发送:同步发送会发生阻塞,一般使用异步发送方式发送消息 消息重试:由于网

    2024年02月11日
    浏览(47)
  • 深入理解Java消息中间件-组件-消息队列

    引言: 消息中间件在现代分布式系统中扮演着至关重要的角色,它解决了系统之间异步通信和解耦的需求。而在消息中间件的架构中,核心组件之一就是消息队列。本文将深入探讨消息队列的架构组件,帮助读者加深对消息中间件的理解和应用。 一、什么是消息队列 消息队列

    2024年04月27日
    浏览(51)
  • java后端技术汇总 + 中间件 + 架构思想

    1. 华为OD机考题 + 答案 2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新) 2023年华为OD真题机考题库大全-带答案(持续更新) 2. 面试题 一手真实java面试题:2023年各大公司java面试真题汇总--持续更新 3. 技术知识 java后端技术汇总 + 中间件 + 架构思想 类型 难度 Spring、

    2024年02月13日
    浏览(76)
  • Java开发框架和中间件面试题(8)

    目录 82.Mybatis一级缓存,二级缓存? 83.Mybatis如何防止SQL注入? 84.mybatis中resultType和resultMap有什么区别? 85.如何在SpringBoot中禁用Actuator断点安全性? 86.什么是SpringBoot?SpringBoot有哪些优点? 87.SpringBoot中的监视器是什么? 88.什么是yaml文件? 89.如何使用SpringBoot实现异常处理?

    2024年02月03日
    浏览(47)
  • 物联网协议Coap之C#基于Mozi的CoapServer实现解析

    目录 前言 一、C#的Coap Server实现 1、CoapServer相关类 2、主要类解析 3、资源控制器定义  4、ResourceManager管理器 二、CoapServer生命周期 1、Server创建代码 2、服务端创建  3、绑定endpoint 4、准备接收请求 总结          在之前的关于物联网协议的介绍中,我们详细介绍了如何基

    2024年01月21日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包