是否可以通过 CoAP 传输文件?

Is it possible to transfer a file through CoAP?

最近,我在做一个项目,我试图将一个json文件传输到CoAP服务器。我将一些随机值放在 key:value 对中,例如:

{
    key1: value1,
    key2: [value21, value22, value23]
}

问题:

更新:

实际文件大小约为152.8 kB。

您可以使用 CoAP POST/PUT 传输任意 JSON 文件。哪个目录可写完全取决于服务器。

请注意,对于这种大小的文件,传输时间会比使用 HTTP 长得多,因为包是在锁步中发送的(放置第一个 1kB,响应,下一个 1kB – 而 HTTP 有一个 TCP window).

对于第一次尝试,您可以尝试 eclipse/californium 的“simple-fileserver-example”。

cf-simple-fileserver

支持读取 (GET) 并为此使用选项块 2。

如果深入离开实验室,RFC7959 blockwise可能会面临几个问题。

  1. coap 通常假定端点由其 ip 地址(和 港口)。尽管分块传输可能会持续更长时间,但该假设可能会被打破。如果客户端面临这样的地址更改,块选项 2 (GET) 可能会起作用,但对于块选项 1 (PUT),则需要特殊准备。

  2. 虽然这样的分块传输往往会持续更长时间,但它可能会由于临时传输问题而暂停。这需要一个“恢复或失败”的策略。同样这里 GET 比 PUT 容易得多。

  3. 关于崩溃的基本传输问题。根据我的经验,blockwise 带有很多块,并且在短时间内使用了很多 MID。如果客户端崩溃并且 select 随机 MID 启动,则未意识到的 MID 冲突的可能性相当高。根据 coap 服务器重复数据删除的实现(严格按照 RFC7252 或对此有先进的认识),您的客户端可能需要一种策略来避免这种情况,即服务器仅基于 MID 重新传输不相关的消息。我当时的经验是,“分析你得到的东西,如果闻起来有味道,等待 247s :-)”。您的客户端也可以保存上次使用的 MID 来解决这个问题,或者使用禁用重复数据删除的 special/separate“块式端点”。

  4. IP。一些 FMPOV 已经看到留给实施的问题并开始填写专利。这可能也需要注意。

总而言之:如果您使用 bockwise 来处理有时 K 字节的负载,我的体验还不错。但如果你经常转账,coap可能不是正确的选择。