MQTT发送和接收HEX数据

import static org.fusesource.hawtbuf.Buffer.utf8;

import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.fusesource.mqtt.client.BlockingConnection;
import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS;
import org.fusesource.mqtt.client.Topic;
public class MqttUtil {
    public static void test(String topic) throws Exception {
            Map<String, Object> jsonMap = new HashMap<String, Object>();
            MQTT mqtt = new MQTT();
            //mqtt连接地址
            mqtt.setHost(server_addr, port);
            // mqtt.setClientId(clientId);
            mqtt.setCleanSession(true);
            //mqtt 用户名
            mqtt.setUserName(username);
            //mqtt 密码
            mqtt.setPassword(password);
            //16进制字符串转换为Byte型数组
            byte[] payload = HexStringToByte("48454C4C4F");
             //byte[] payload = {(byte) 0xF0, (byte) 0x9F, (byte) 0x98, (byte) 0x81};
            //获取mqtt的连接对象BlockingConnection
            BlockingConnection connection = mqtt.blockingConnection();
            //连接mqtt
            connection.connect();
            //mq主题
            Topic[] topics = { new Topic(utf8(topic), QoS.AT_LEAST_ONCE) };
            //订阅主题
            byte[] qoses = connection.subscribe(topics);
            //发送消息
            connection.publish(topic, payload, QoS.EXACTLY_ONCE, false);
            
            //接收主题消息
            Message message;
            while (true) {
                try {
                    message = connection.receive(1000, TimeUnit.MILLISECONDS);
                    System.out.println("1--"+new String(message.getPayload()));
                    //接收消息
                    String msg = String.valueOf(message.getPayloadBuffer());
                    System.out.println("2--"+msg);
                    String jsonStr = "";
                    //判断是消息体是ASCII还是HEX
                    if (msg.substring(0, 3).equals("hex")) {
                        msg = msg.substring(5);
                        byte[] bytes = HexStringToByte(msg);
                        jsonStr = new String(bytes, "utf-8");
                        System.out.println("3--"+jsonStr);
                    } else {
                        jsonStr = msg.substring(7);
                        System.out.println(jsonStr);
                    }
                } catch (Exception e) {
                    connection.disconnect();
                    break;
                }
            }
        }

/**
     * 16进制字符串转换为Byte型数组16进制源字符串
     * 
     * @param 16进制字符串
     * @return Byte类型数组
     */
    public static byte[] HexStringToByte(String hexString) {
        hexString = hexString.replace(" ", "");
        int len = hexString.length();
        if (len % 2 != 0)
            return null;
        byte[] bufD = new byte[len / 2];
        byte[] tmpBuf = hexString.getBytes();
        int i = 0, j = 0;
        for (i = 0; i < len; i++) {
            if (tmpBuf[i] >= 0x30 && tmpBuf[i] <= 0x39)
                tmpBuf[i] -= 0x30;
            else if (tmpBuf[i] >= 0x41 && tmpBuf[i] <= 0x46)
                tmpBuf[i] -= 0x37;
            else if (tmpBuf[i] >= 0x61 && tmpBuf[i] <= 0x66)
                tmpBuf[i] -= 0x57;
            else
                tmpBuf[i] = 0xF;
        }
        for (i = 0, j = 0; i < len; i += 2, j++) {
            bufD[j] = (byte) ((tmpBuf[i] << 4) | tmpBuf[i + 1]);
        }
        return bufD;

    }

    public static void main(String[] args) throws Exception {
        test("myTopic");
    }



}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过 MQTT 发送接收图片,需要将图片转换为字节流,并将其作为消息体发送MQTT 服务器。以下是一个使用 Python 的 Paho-MQTT 库实现发送接收图片的示例代码: 发送图片: ```python import paho.mqtt.client as mqtt import base64 # MQTT 客户端连接回调函数 def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 读取图片文件并将其转换为 base64 编码的字节流 with open("image.jpg", "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) # 发送图片消息 client.publish("image_topic", encoded_string) # 创建 MQTT 客户端并连接到服务器 client = mqtt.Client() client.on_connect = on_connect client.connect("mqtt_server_address", 1883, 60) # 开始 MQTT 客户端的主循环 client.loop_forever() ``` 在此示例代码中,我们首先创建了一个 MQTT 客户端,并设置了连接回调函数。在连接回调函数中,我们读取名为 `image.jpg` 的图片文件,并将其转换为 base64 编码的字节流。接下来,我们将图片消息发送到名为 `image_topic` 的 MQTT 主题中。最后,我们启动 MQTT 客户端的主循环,使其保持运行状态并等待新的消息到达。 接收图片: ```python import paho.mqtt.client as mqtt import base64 # MQTT 客户端消息接收回调函数 def on_message(client, userdata, msg): if msg.topic == "image_topic": # 将接收到的消息转换为 base64 编码的字节流 encoded_string = msg.payload # 将 base64 编码的字节流转换为图片并保存到本地文件系统 with open("received_image.jpg", "wb") as image_file: image_file.write(base64.b64decode(encoded_string)) # 创建 MQTT 客户端并连接到服务器 client = mqtt.Client() client.on_message = on_message client.connect("mqtt_server_address", 1883, 60) # 订阅 MQTT 主题 client.subscribe("image_topic") # 开始 MQTT 客户端的主循环 client.loop_forever() ``` 在此示例代码中,我们首先创建了一个 MQTT 客户端,并设置了消息接收回调函数。在消息接收回调函数中,我们判断接收到的消息是否为名为 `image_topic` 的 MQTT 主题发来的图片消息。如果是,则将接收到的消息转换为 base64 编码的字节流,并将其转换为图片并保存到本地文件系统。接下来,我们创建了一个 MQTT 订阅并订阅了名为 `image_topic` 的 MQTT 主题。最后,我们启动 MQTT 客户端的主循环,使其保持运行状态并等待新的消息到达。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值