coap:使用californium建立coap server和client的简单示例

news2024/11/26 11:47:03

【pom.xml】

<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>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>

【logback.xml】

<configuration debug="false" xmlns="http://ch.qos.logback/xml/ns/logback"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
               https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ::: %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

【MyDemo1CoapServerTest.java】

package com.chz.myCoap.demo1;

@Slf4j
public class MyDemo1CoapServerTest {

   private static String name = MyDemo1CoapServerTest.class.getSimpleName();
 
   public static void main(String[] args) {
      CoapServer server = new CoapServer();// 默认端口5683

      server.add(new CoapResource("get_hello") {
         @Override
         public void handleGET(CoapExchange exchange) {
            log.info("{}::handleGET: get_hello", name);
            exchange.respond(ResponseCode.CONTENT, "get_hello: Hello this is MyDemo1CoapServerTest");
         }
      });

      server.add(new CoapResource("post_hello") {
         @Override
         public void handlePOST(CoapExchange exchange) {
            String requestPayload = new String(exchange.getRequestPayload());
            log.info("{}::handlePOST: post_hello, content={}", name, requestPayload);
            exchange.respond(ResponseCode.CONTENT, "post_hello: Hello this is MyDemo1CoapServerTest");
         }
      });

      server.add(new CoapResource("time") { // 创建一个资源为time 请求格式为 主机:端口\time
         @Override
         public void handleGET(CoapExchange exchange) {
            log.info("{}::handleGET: time", name);
            Date date = new Date();
            exchange.respond(ResponseCode.CONTENT, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date));
         }
      });

      server.start();
   }
}

【MyDemo1CoapClientTest.java】

package com.chz.myCoap.demo1;

@Slf4j
public class MyDemo1CoapClientTest {

   private static String name = MyDemo1CoapClientTest.class.getSimpleName();

   public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {

      URI uri = new URI("coap://localhost:5683/get_hello");
      CoapClient client = new CoapClient(uri);
      CoapResponse response = client.get();
      if (response != null) {
         log.info("code: {}", response.getCode());
         log.info("options: {}", response.getOptions());
         log.info("responseText: {}", response.getResponseText());
      }

      Thread.sleep(1000L);

      URI uri2 = new URI("coap://localhost:5683/post_hello");
      CoapClient client2 = new CoapClient(uri2);
      String payload = "I am "+name;
      CoapResponse response2 = client2.post(payload, 0);
      if (response2 != null) {
         log.info("code: {}", response2.getCode());
         log.info("options: {}", response2.getOptions());
         log.info("responseText: {}", response2.getResponseText());
      }

      Thread.sleep(1000L);

      URI uri3 = new URI("coap://localhost:5683/time");
      CoapClient client3 = new CoapClient(uri3);
      CoapResponse response3 = client3.get();
      if (response3 != null) {
         log.info("code: {}", response3.getCode());
         log.info("options: {}", response3.getOptions());
         log.info("responseText: {}", response3.getResponseText());
      }
 
   }
 
}

启动【MyDemo1CoapServerTest】,然后启动【MyDemo1CoapClientTest】
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1816751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

元宇宙3D虚拟代言人凸显企业形象和品牌风格

在虚拟社交的新时代浪潮中&#xff0c;拥有一个个性鲜明的AI数字人形象&#xff0c;无疑能让你在虚拟的海洋中独领风骚。深圳华锐视点作为你的数字形象创造的合作伙伴&#xff0c;为你呈现了一个丰富多彩的素材库与高度灵活的编辑工具。在这里&#xff0c;你可以依据个人喜好和…

爆款AI工具大盘点:最强文本、视频、音乐生成AI,适用岗位全解析!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

内存管理--3.用幻灯片讲解C++手动内存管理

用幻灯片讲解C手动内存管理 1.栈内存的基本元素 2.栈内存的聚合对象 3.手动分配内存和释放内存 注意&#xff1a;手动分配内存&#xff0c;指的是在堆内存中。 除非实现自己的数据结构&#xff0c;否则永远不要手动分配内存! 即使这样&#xff0c;您也应该通过std::allocator…

Redis 配置及操作整理

本篇文章介绍了Redis在window中如何安装和修改配置及Redis几种数据类型及操作命令。 目录 window环境安装 修改配置 设置密码 设置最大内存大小 其他参数介绍 启动服务 使用客户端 客户端连接 验证密码 Redis数据类型 String 设置 运算 其它 Hash 设置 获取 …

文件操作学不懂,小代老师带你深入理解文件操作(上卷)

文件操作学不懂&#xff0c;小代老师带你深入理解文件操作上卷 1. 为什么使用⽂件&#xff1f;2. 什么是⽂件&#xff1f;2.1 程序⽂件2.2 数据⽂件2.3 文件名 3. 二进制文件和文本文件&#xff1f; 1. 为什么使用⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据…

旋转方块加载动画

效果图: 完整代码: <!DOCTYPE html> <html> <head><meta charset="UTF-8" /><title>旋转方块加载动画</title><style type="text/css">body {background: #ECF0F1;display: flex;justify-content: center;al…

java自学阶段二:JavaWeb开发50(Spring和Springboot学习)

Spring、Springboot基础知识学习 目录 学习目标Spring基础概念IOC控制反转DI依赖注入事务管理AOP面向切面编程Spring案例说明&#xff08;Postman使用、Restful开发规范、lombok、Restful、nginx了解&#xff09; 一&#xff1a;学习目标&#xff1a; 1&#xff09;了解Sprin…

如何基于 Elasticsearch 实现排序沉底或前置

在搜索场景的应用中&#xff0c;存在希望根据某个或某些字段来调整排序评分&#xff0c;从而实现排序沉底或置顶效果的使用需求。以商机管理中的扫街场景为例&#xff0c;当我们在扫街场景中需要寻找一个商户时&#xff0c;希望这个商户离的近、GMV 潜力大、被他人跟进过的次数…

前端计网面试题(二)

一、在浏览器中输入url并且按下回车之后发生了什么&#xff1f; 首先解析url&#xff0c;判断url是否合法&#xff0c;如果合法再判断是否完整。如果不合法&#xff0c;则使用用户默认的搜索引擎进行搜索。DNS域名解析获取URL对应的ip地址。&#xff08;首先看本地是否有缓存&…

【干货】SaaS出海业务必看的五个海外流量渠道

一、Product Hunt 月访客约500万 Product Hunt拥有巨大的用户流量和影响力&#xff0c;其全球Alexa排名在前四千以内。许多知名的产品&#xff0c;如ChatGPT、Notion等&#xff0c;都在这里成功上线并获得广泛关注。在美国有什么新产品&#xff08;不论网站、APP还是插件&…

ThinkPHP+Bootstrap简约自适应网址导航网站源码

使用 ThinkPHPbootstrap 开发&#xff0c;后台采用全局 ajax 无刷新加载&#xff0c;前后台自适应&#xff0c;前台页面非常简洁适合自己收藏网站或做导航网站。 搭建教程&#xff1a; 1.整个主机 2.绑定解析域名 3.上传源码&#xff0c;解压 把解压出来的 nav.sql 文件导入数…

25.入口点注入

钩子注入是利用SetWindowsHookEx函数这是一个被动的注入方式&#xff0c;入口点注入是一个主动注入&#xff0c;就是做这件事什么都不为就是为了注入&#xff0c;入口点注入有很多优势比如说做一个游戏的多开器&#xff0c;多开的检测事情是在游戏一启动的时候完成的&#xff0…

两种典型的嵌入式系统架构模式

大多数嵌入式系统都具备实时特征&#xff0c;那么&#xff0c;这种嵌入式系统的典型架构可概括为两种模式&#xff0c;即层次化模式架构和递归模式架构。 1.层次化模式架构 为了达到概念一致性&#xff0c;许多系统通过层次化的方法进行搭建。这样做的结果是&#xff1a;位于高…

Offline : How to Leverage Diverse Demonstrations in Offline Imitation Learning

ICML 2024 paper code Intro 文章提出一种从混合质量数据中高效抽取有用状态动作数据用于模仿学习。算法基于一种假设&#xff0c;即使当前状态并非属于专家状态&#xff0c;但是若在该状态下采取动作导致下一状态是专家状态&#xff0c;那么该状态相较于随机状态更有价值。 …

【漏洞复现】海洋CMS /js/player/dmplayer/dmku/ SQL注入漏洞复现(CVE-2024-29275)

0x01 产品简介 海洋CMS是一套专为不同需求的站长而设计的内容管理系统&#xff0c;灵活、方便、人性化设计、内容的专业网站。海洋CMS基于PHPMySql技术开发&#xff0c;完全开源免费、无任何加密代码。简单易用是最大的特色&#xff0c;可快速建立一个海量 0x02 漏洞概述 海…

Redis高并发高可用

1. 复制机制 在分布式系统中&#xff0c;为了解决单点问题&#xff0c;通常会将数据复制多个副本部署到其他机器&#xff0c;以满足故障恢复和负载均衡等需求。Redis提供了复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础&#xff0c;后面的…

1224 - 过河卒

题目描述 AA 点有一个过河卒&#xff0c;需要走到目标 BB 点。 卒行走规则&#xff1a;可以向下、或者向右。同时在棋盘上的任一点有一个对方的马&#xff08;如下图的 CC 点&#xff09;&#xff0c;该马所在的点和所有跳跃一步可达的点称为对方马的控制点。 例如&#xff…

LabVIEW RT环境中因字符串拼接导致的系统崩溃问题

在LabVIEW实时操作系统&#xff08;RT&#xff09;环境中运行的应用程序出现字符串拼接后死机的问题&#xff0c;通常涉及内存管理、内存泄漏或其他资源管理问题。以下是一些指导和步骤&#xff0c;帮助解决这个问题&#xff1a; 1. 内存泄漏检测 字符串拼接会在内存中创建新…

Could not resolve dependencies for project XXX

大家好&#xff0c;这里是教授.F 如果项目上使用的是idea ide的多模块话&#xff0c;需要模块之间的依赖&#xff0c;比如说系统管理模块依赖授权模块进行认证和授权&#xff0c;而认证授权模块需要依赖系统管理模块进行&#xff0c;然后&#xff0c;就开始相互依赖&#xff0…

大水文之------端午练练JS好了

最近有点不太知道要干啥了&#xff0c;昨天看了集cocos的介绍&#xff0c;下载了个DashBoard&#xff0c;看了看里面的内容&#xff0c;确实有点小震惊&#xff0c;还有些免费的源码可以学习&#xff0c;挺好的。 昨天学习ts&#xff0c;感觉自己的js水平好像不太行&#xff0c…