当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)

Posted

技术标签:

【中文标题】当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)【英文标题】:Unable to get payload response when payload length size is greater than 1000K.(Coap) 【发布时间】:2020-10-11 09:34:50 【问题描述】:

我正在使用 Coapthon 和 Helperclient 库来获取、放置和发布数据。 我正在使用下面提到的代码行来获取有效负载。如果 pauload 长度大小不超过 1000,它可以正常工作。

response = self.client.get(path_check, timeout=30)
Jun 21, 2020 5:56:11 PM com.coap.dtls.test.ExampleDTLSClient$1 receiveData
INFO: received response, length53, hex payload:

但在某些情况下,payload 大小为“length1386”,无法获取到payload:

Jun 21, 2020 5:56:21 PM com.coap.dtls.test.ExampleDTLSClient$1 receiveData
INFO: received response, length1386, hex payload:

并显示下面提到的错误: AttributeError: 'NoneType' 对象没有属性 'payload'

任何人都可以帮助他如何获得长有效载荷? 我正在使用 python 脚本和 copathon 库来实现它。

response = self.client.get(path_check, timeout=30)

【问题讨论】:

如果您针对收到的错误添加更多信息,您可能会获得更多有用的答案。至少,查看 AttributeError 的回溯并确保代码中异常来自的行(即回溯的框架是您的代码)是“我到目前为止所做的事情”部分的一部分你的问题。将堆栈跟踪作为一个整体包含在内通常也很有帮助。 您的标题包含“1000K”。那么您的意思是 1,000 字节还是 1,000,000 字节?对于后者,30(秒?)的超时可能太小了。从一个更大的开始以获得时间,然后使用该时间加上一个时间缓冲区。 【参考方案1】:

CoAP 的消息大小限制为单个 UDP 数据包。

通常,当超过最大大小时,服务器和客户端会退回到所谓的块传输。这允许传输几乎任意大小的有效载荷。

在这个具体的案例中,乍一看,您似乎试图将响应负载作为单个响应消息的.payload 访问,因为没有单个响应消息,所以它不存在 - 但 CoAPython 的块层应该照顾好那个。您可能在库实现中遇到了错误,这是最容易讨论的at its issue tracker。

【讨论】:

感谢@chrysn 更新。所以现在有任何选择,以便我可以继续前进。因此,我被卡住了,无法前进。 在 Python 中还有其他 CoAP 库(我维护其中一个),但如果您更新帖子并详细说明您所做的事情,您可能会更容易取得进展(请参阅帖子评论:添加实际导致错误的代码、回溯,并可能链接到您托管当前版本的位置)。

以上是关于当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)的主要内容,如果未能解决你的问题,请参考以下文章

有效载荷 4096 字节是不是包含registration_id 长度?

当文件大小大于 2mb 时,Imagick 无法调整 GIF 图像的大小

从 BLE v4.2 到 4.0 的有效载荷大小的向后兼容性

JWT在python中加密有效载荷? (JWE)

改变在有效载荷中传递的 Vuex 数组

如果我在 C# 中发送 0 有效载荷数据,udp 数据包的大小是多少?