You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下如何用Mosquitto_pub发布二进制字节MQTT负载?

问题描述

在Windows环境下使用MQTT Mosquitto,现有情况:

  • 可通过Java代码订阅Mosquitto Broker并监听MQTT消息,代码中使用message.getPayload()获取消息负载(字节数组,代码运行正常)。
  • 遇到的问题:通过命令提示符发布消息时,Java代码接收到的负载与发布内容完全不符。

具体细节:希望发布单个二进制字节(例如11001111,是1个字节而非8个字符)。尝试两种方式均失败:

  1. 将文本“11001111”存入data2.txt后,执行命令mosquitto_pub -h localhost -t sample_data -f "C:\Users\....\data2.txt",Java收到的字节数组为49 49 48 48 49 49 49 49(对应ASCII的'1'和'0')。
  2. 使用mosquitto_pub -h localhost -t sample_data -m "11001111"命令发布,得到相同结果。

咨询两个问题:
(1) 如何通过命令提示符执行mosquitto_pub命令发布上述单个二进制字节?
(2) 若要发布多个二进制字节(例如11001111、11111111、11111111,共3个字节而非24个字符),该如何操作?

解决方案

(1) 发布单个二进制字节

Windows命令提示符无法直接通过-m参数输入二进制字节,可借助二进制文件配合-f参数实现:

  1. 生成包含目标二进制字节的文件:
    以二进制11001111(对应十六进制0xCF)为例,用PowerShell执行以下命令生成二进制文件:
    [byte[]]$byte = 0xCF; [System.IO.File]::WriteAllBytes("C:\temp\single_byte.bin", $byte)
    
  2. 发布该二进制文件:
    在命令提示符中执行:
    mosquitto_pub -h localhost -t sample_data -f "C:\temp\single_byte.bin"
    
    此时Java代码收到的字节数组将是207(十进制,对应目标二进制字节)。

(2) 发布多个二进制字节

同样通过生成多字节二进制文件实现,或直接通过管道传递数据:

方式一:二进制文件发布

  1. 生成包含多字节的二进制文件:
    以11001111(0xCF)、11111111(0xFF)、11111111(0xFF)三个字节为例,用PowerShell生成:
    [byte[]]$bytes = 0xCF, 0xFF, 0xFF; [System.IO.File]::WriteAllBytes("C:\temp\multi_bytes.bin", $bytes)
    
  2. 发布文件:
    mosquitto_pub -h localhost -t sample_data -f "C:\temp\multi_bytes.bin"
    
    Java代码将收到字节数组207 255 255,对应三个目标二进制字节。

方式二:管道直接传递(PowerShell环境)

无需生成文件,直接通过标准输入传递二进制数据:

[byte[]]$bytes = 0xCF, 0xFF, 0xFF; $bytes | mosquitto_pub -h localhost -t sample_data -s

其中-s参数表示从标准输入读取消息内容。

内容的提问来源于stack exchange,提问作者user1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:56:08