当前位置: 首页 > 知识库问答 >
问题:

从Californium CoAP客户端检索观测值

司空坚
2023-03-14

我正在尝试实现一个基于Californium的CoAP客户端。我让这个客户观察一个资源:

public static class CoapCl{

    double val = 0;
    CoapClient client = new CoapClient("coap://localhost/Ultrasonic");
    CoapObserveRelation relation = client.observe(new CoapHandler() {
    @Override public void onLoad(CoapResponse response)
    {
        val = Double.parseDouble(response.getResponseText());
    }

    @Override
    public void onError() {
        System.out.println("Failed");

    }
});
}

我想从另一个类访问值“val”。我该怎么做?我尝试像这样从CoapCl类调用引用并打印出值:

CoapCl client = new CoapCl();
    while(true)
    {
    System.out.println("Testing: " + client.val);
    }   

这将打印我从CoAP客户端获得的所有值,包括已更改和未更改的值。如果只想得到改变后的值,该怎么办?

共有1个答案

宗政霄
2023-03-14

这个问题本身与加州和CoAP无关。除了CoapHandler是异步的,但这是一个相当大的压力。尽管如此,我还是建议以某种回调结束:

public class CoapCl {
    private final Consumer<Double> valueChangedAction;
    private final CoapClient client = new CoapClient("coap://localhost/Ultrasonic");

    public CoapCl(Consumer<Double> valueChangedAction) {
        this.valueChangedAction = valueChangedAction;
    }

    public void run() {
        client.observe(new CoapHandler() {
            @Override
            public void onLoad(CoapResponse response) {
                valueChangedAction.accept(
                    Double.parseDouble(
                        response.getResponseText()
                    )
                );
            }

            @Override
            public void onError() {
                System.out.println("Failed");
            }
        });
    }
}
new CoapCl(val -> System.out.println("Testing: " + val)).run();

请记住,您必须以某种方式阻止主线程,以防止程序立即退出。以前,你用无限循环阻止了它。现在,如果你的程序中还没有这样的东西,你将不得不使用系统.in.read()或线程.sleep或其他内容。

 类似资料:
  • 很多客户使用E立方管理平台时,需要使用FTP方式完成附件或图片的传输,如何对客户端进行FTP检测呢? 下边介绍检测方法: 1、首先,客户端电脑的防火墙要开放 21号 端口 2、点击 E立方管理平台-->选项 这里有测试 3、FTP采用被动模式 选中和不选中,分别 检测 一下(检测完一种后,关闭窗体重新打开再测试另外一种) 看见如下提示就表示可以使用这种方式了 >

  • 我向服务器发出请求,并得到可观察到的响应。在数据内部,我有一个ID,它引用另一个文档,我需要发送另一个请求来获取数据,并将其附加到父对象的数据中。如何做到这一点? 有了Promise,我可以使用async/await来实现这一点,但我想知道如何使用Observable来实现这一点 promise样品 如何实现上述与观察? 编辑1 基于@Teddesterne回复,我写的代码如下,但我在订阅中得到的

  • 问题内容: 我试图通过一个简单的SQL语句获取客户端的IP地址。我不想使用PHP或其他技术。仅纯SQL。当我使用 我懂了 当我使用 我懂了 但是我如何获得普通IP?非常感谢。 问题答案: 您将仅获得与MySQL通信的客户端进程的IP地址。假设这是您想要的: 将为您提供连接到当前连接上的mysql服务器的主机名(如果未启用名称解析,通常为IP地址)。

  • 客户端测试更多关心客户端方面的代码执行情况,通常是web浏览器或者浏览器插件。区别于服务器端,代码在客户端执行并直接返回随后的结果。 下列文章描述了如何进行客户端的web应用测试: 基于DOM跨站脚本测试 (OTG-CLIENT-001) JavaScript脚本执行测试 (OTG-CLIENT-002) HTML注入测试 (OTG-CLIENT-003) 客户端URL重定向测试 (OTG-CLI

  • 我已经编写了java客户端服务器套接字连接代码。因为服务器接受客户机连接,然后服务器使用PrintStream发送数据,客户机在readline()中读取数据。在此之后,客户端将在readline中等待服务器。如果存在网络断开,客户端将在readline中保持等待,并且从不从readline退出。是否有一种方法从客户端本身检测断开?或者我是否必须编写新的心跳线程来检查网络断开?

  • 我正在使用C#window应用程序表单对TCP多线程服务器进行工作,我正在尝试检测客户端的机器是否关闭并断开与服务器的连接。看了一些帖子,有了一些想法: 如何确定tcp是否连接? 我的代码如下: 多谢帮忙。