java - MQTT-JAVA客户端程序

标签 java mqtt paho

我用 Java 并使用 mosquitto-broker 编写了 PAHO 客户端 MQTT 程序。

发布商代码片段: 发布商发送 0 到 254 之间的数字。

char[] charset = new  char[255]; 
for(int i=0;i< 255;i++)
{
    charset[i] = (char)i;
    System.out.println(i+" "+(int)charset[i]);
}

String str2 = String.valueOf(charset);
MqttMessage message1 = new MqttMessage();
message1.setPayload(str2.getBytes());            
client.publish("temperature",message1);

订阅者代码段: 订阅者预计会收到 0 到 254 之间的号码。

byte[] ascii = message.getBytes(); 
for (int i = 0; i <ascii.length; i++) 
{                         
       System.out.println(i +" "+(long)(ascii[i] & 0xFF));                                           
}

输出快照: Publisher output

subscriber ouput

订阅者输出出现问题:

The index from 128 to 159 in subscriber output is receiving the value '63' instead of the normal numbers which are being sent from publisher side.

最佳答案

为什么不使用字节数组

出版商

byte[] payload = new byte[255]; 
for(int i = 0; i < 255;i ++) {
    payload[i] = (byte)i;
}

message.setPayload(payload);            
client.publish("temperature", message);

订阅者

byte[] paylaod = message.getPayload();
for (int i = 0; i < payload.length; i++) {                         
       System.out.println(i +" "+(int)(payload[i] & 0xFF));                                           
}

但问题主要与 Java 如何编码 String a char 有关是 16 位 UTF-16 编码字符。字符串是“具有附加功能的字符数组”。

所以如果你打电话String#getBytes() UTF-16 数据被转换为 UTF-8,这会导致您的情况数据丢失。字符串并非设计用于携带二进制数据

关于java - MQTT-JAVA客户端程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53338058/

相关文章:

java - Thymeleaf 计数每个循环中的匹配项(对象数组)

java - 返回有界通配符

java - 使用时区 JAVA API 翻译时区名称

java - 如何使用自签名证书连接到 Android(paho 客户端)中的 Mqtt 服务器?

java - 如何检查订户是否有效以接受针对 MQTT 上已发布主题收到的消息

javascript - Java 属性文件到 JSON

python - 为什么我的错误没有被捕获?

golang mqtt 发布和订阅

javascript - Paho MQTT Javascript 订阅多个主题?

python - AWS IOT 连接超时异常