java连接mqtt实现数据读写

直接上代码啦,至于原理什么的大家可以自行搜索

 这个是带用户名和密码的
public static void main(String[] args) {
        String broker = ""; // MQTT Broker的地址
        String clientId = "zyf"; // 客户端ID,可以自定义
        MemoryPersistence persistence = new MemoryPersistence();

// 设置用户名和密码
        String username = "your-username"; // 替换为你的用户名
        String password = "your-password"; // 替换为你的密码

        try {
            MqttClient client = new MqttClient(broker, clientId, persistence);

            // 设置回调处理类
            client.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable cause) {
                    System.out.println("连接丢失");
                }

                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    System.out.println("收到消息:Topic=" + topic + ", Message=" + new String(message.getPayload()));
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {
                    System.out.println("消息发送完成");
                }
            });

            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(false);

            // 添加用户名和密码
            connOpts.setUserName(username);
            connOpts.setPassword(password.toCharArray());

            System.out.println("连接到 " + broker);
            client.connect(connOpts);
            System.out.println("连接成功");

            String topic = "data/jszx/group1/1"; // 订阅的主题
            int qos = 2; // 消息质量服务等级 (0:最多一次,1:至少一次,2:只有一次)

            // 等待一段时间后关闭连接
            Thread.sleep(1000);
//    client.disconnect();
//    System.out.println("连接已断开");
        } catch (MqttException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
匿名的
public class MqttTest {
    private static final String BROKER = ""; // MQTT Broker的地址
    private static final String CLIENT_ID = "zyf"; // 客户端ID,可以自定义
    private MqttClient client;

    @Before
    public void setup() {
        MemoryPersistence persistence = new MemoryPersistence();

        try {
            client = new MqttClient(BROKER, CLIENT_ID, persistence);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testSubscribe() {
        try {
            // 设置回调处理类

            client.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable cause) {
                    System.out.println("连接丢失");
                }

                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    System.out.println("收到消息:Topic=" + topic + ", Message=" + new String(message.getPayload()));
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {
                    System.out.println("消息发送完成");
                }
            });

            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(false);

            System.out.println("连接到 " + BROKER);
            client.connect(connOpts);
            System.out.println("连接成功");

            String subscribeTopic = "data/jszx/group1/1"; // 订阅的主题
            int subscribeQos = 0; // 订阅的消息质量服务等级 (0:最多一次,1:至少一次,2:只有一次)
            subscribeToTopic(subscribeTopic, subscribeQos);

            // 等待一段时间后关闭连接
            Thread.sleep(5000);
            client.disconnect();
            System.out.println("连接已断开");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testPublish() {
        try {
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(false);

            System.out.println("连接到 " + BROKER);
            client.connect(connOpts);
            System.out.println("连接成功");

            // 发布消息
            publishSampleMessage();

            // 等待一段时间后关闭连接
            Thread.sleep(1000);
            client.disconnect();
            System.out.println("连接已断开");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 订阅方法
    private void subscribeToTopic(String topic, int qos) throws MqttException {
        client.subscribe(topic, qos);
    }

    // 发布消息方法
    private void publishSampleMessage() throws MqttException {
        // 创建一个Map表示要发送的数据
        Map<String, Object> data = new HashMap<String, Object>();
        data.put("type", "set_var");
        Map<String, String> payload = new HashMap<String, String>();
        payload.put("do1", "1");
        data.put("payload", payload);

        // 将Map转换为JSON字符串
        Gson gson = new Gson();
        String jsonData = gson.toJson(data);

        // 创建消息对象
        MqttMessage message = new MqttMessage(jsonData.getBytes());
        message.setQos(0);

        String publishTopic = "cmd/jszx/group1/1"; // 发布的主题
        client.publish(publishTopic, message);

        System.out.println("已发布消息:" + jsonData);
    }

附上maven,里面有一些没用的啊,是我实现其他功能的,大家

    <dependencies>
    <!-- Eclipse Paho MQTT Client -->
    <dependency>
        <groupId>org.eclipse.paho</groupId>
        <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
        <version>1.2.5</version> <!-- 版本号可能会有所不同 -->
    </dependency>
       
    </dependencies>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT是一种基于发布/订阅模式的轻量级通信协议,常用于物联网中设备与服务器之间的通信。Java实现MQTT连接需要使用Eclipse Paho MQTT客户端库。 以下是一个简单的Java程序示例,用于连接MQTT代理并发布消息: ```java import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MQTTClient { public static void main(String[] args) { String broker = "tcp://localhost:1883"; String clientId = "JavaClient"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttClient mqttClient = new MqttClient(broker, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); System.out.println("Connecting to broker: " + broker); mqttClient.connect(connOpts); System.out.println("Connected"); String topic = "test/topic"; String content = "Hello, World!"; int qos = 2; System.out.println("Publishing message: " + content); MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qos); mqttClient.publish(topic, message); System.out.println("Message published"); mqttClient.disconnect(); System.out.println("Disconnected"); } catch (MqttException me) { System.out.println("reason: " + me.getReasonCode()); System.out.println("msg: " + me.getMessage()); System.out.println("loc: " + me.getLocalizedMessage()); System.out.println("cause: " + me.getCause()); System.out.println("excep: " + me); } } } ``` 在这个例子中,我们使用`MqttClient`类来创建一个MQTT客户端。`MqttConnectOptions`类用于设置连接选项,例如设置清除会话标志(`setCleanSession(true)`)。接着,我们使用`mqttClient.connect(connOpts)`方法连接MQTT代理,并使用`mqttClient.publish(topic, message)`方法发布一条消息。最后,我们使用`mqttClient.disconnect()`方法断开连接。 请确保已经添加Eclipse Paho MQTT客户端库到您的Java项目中,否则编译代码时将会出现错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值