添加依赖:
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
代码:
import org.eclipse.paho.client.mqttv3.*;
public class MqttClientExample {
private static final String BROKER_URL = "tcp://192.168.0.188:1883"; // MQTT 服务器地址
private static final String CLIENT_ID = "testClient123"; // 客户端 ID(不能重复)
private static final String USERNAME = "mqtt_user";
private static final String PASSWORD = "123456";
private static final String TOPIC = "test/topic";
public static void main(String[] args) {
try {
// 创建 MQTT 客户端
MqttClient client = new MqttClient(BROKER_URL, CLIENT_ID, new MemoryPersistence());
// 配置 MQTT 连接参数
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true); // 设置清除会话
options.setUserName(USERNAME);
options.setPassword(PASSWORD.toCharArray());
options.setKeepAliveInterval(60); // 心跳包间隔(秒)
options.setAutomaticReconnect(true); // 自动重连
// 连接 MQTT 服务器
client.connect(options);
System.out.println("✅ 已连接到 MQTT 服务器: " + BROKER_URL);
// 订阅主题
client.subscribe(TOPIC, (topic, message) -> {
System.out.println("📩 收到消息: " + new String(message.getPayload()));
});
// 发送一条测试消息
MqttMessage message = new MqttMessage("Hello MQTT!".getBytes());
message.setQos(1); // QoS 级别:0, 1, 2
client.publish(TOPIC, message);
System.out.println("📤 已发送消息: " + new String(message.getPayload()));
} catch (MqttException e) {
e.printStackTrace();
}
}
}
安装环境:
brew install eclipse-paho-mqtt-c eclipse-paho-mqtt-cpp
创建:MqttClient.mm
#import "MqttClient.h"
#import <iostream>
#include <mqtt/client.h>
using namespace std;
@interface MqttClient ()
@property (nonatomic, strong) NSString *broker;
@property (nonatomic, strong) NSString *clientId;
@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *password;
@end
@implementation MqttClient {
mqtt::client *client;
}
- (instancetype)initWithBroker:(NSString *)broker clientId:(NSString *)clientId {
if (self = [super init]) {
self.broker = broker;
self.clientId = clientId;
// 创建 MQTT 客户端
client = new mqtt::client([broker UTF8String], [clientId UTF8String]);
// 设置回调
client->set_callback(mqtt::callback([&](mqtt::const_message_ptr msg) {
NSLog(@"📩 收到 MQTT 消息: %s", msg->get_payload_str().c_str());
}));
}
return self;
}
// 连接 MQTT 服务器
- (void)connectWithUsername:(NSString *)username password:(NSString *)password {
self.username = username;
self.password = password;
try {
mqtt::connect_options connOpts;
connOpts.set_user_name([username UTF8String]);
connOpts.set_password([password UTF8String]);
connOpts.set_clean_session(true);
client->connect(connOpts);
NSLog(@"✅ 连接 MQTT 服务器成功");
} catch (const mqtt::exception &e) {
NSLog(@"❌ 连接失败: %s", e.what());
}
}
// 订阅主题
- (void)subscribeToTopic:(NSString *)topic {
try {
client->subscribe([topic UTF8String], 1);
NSLog(@"✅ 订阅 MQTT 主题: %@", topic);
} catch (const mqtt::exception &e) {
NSLog(@"❌ 订阅失败: %s", e.what());
}
}
// 发布消息
- (void)publishMessage:(NSString *)message toTopic:(NSString *)topic {
try {
mqtt::message_ptr pubmsg = mqtt::make_message([topic UTF8String], [message UTF8String]);
pubmsg->set_qos(1);
client->publish(pubmsg);
NSLog(@"📤 发送 MQTT 消息: %@", message);
} catch (const mqtt::exception &e) {
NSLog(@"❌ 发送失败: %s", e.what());
}
}
// 断开连接
- (void)disconnect {
try {
client->disconnect();
NSLog(@"🔌 断开 MQTT 连接");
} catch (const mqtt::exception &e) {
NSLog(@"❌ 断开失败: %s", e.what());
}
}
- (void)dealloc {
delete client;
}
@end
调用方法:
#import "MqttClient.h"
MqttClient *mqtt = [[MqttClient alloc] initWithBroker:@"tcp://192.168.0.188:1883"
clientId:@"iOS_Client"];
[mqtt connectWithUsername:@"mqtt_user" password:@"123456"];
[mqtt subscribeToTopic:@"test/topic"];
[mqtt publishMessage:@"Hello from iOS" toTopic:@"test/topic"];