美文网首页
iOS MQTT 应用 使用MQTTClient

iOS MQTT 应用 使用MQTTClient

作者: 小锤子_ | 来源:发表于2022-03-27 10:49 被阅读0次

直接上代码,最好写一个单例中去实现

需要特别注意的是 transport.host 后边的地址IP,前面不要加http://因为MQTTClient 这个封装已经为我们加好了。

还有需要考虑的断网,切换网络 ,连接断开情况,自己加一个网络监控。

还有进入后台连接断开,热启动,冷启动 的时候是否需要重新连接需要考虑

设置代理
@interface MqttManager()<MQTTSessionDelegate>



-(void)creatSession
{
        self.mqttSession = [[MQTTSession alloc] init];
        MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init];
        transport.host = @"IP地址";
        transport.port = 端口;
        self.mqttSession.transport = transport;
        // 设置代理 回调信息
        self.mqttSession.delegate = self;
 
 
    // 设置签名, 签名唯一性 //MQTT_NAME 为自己配制的字符串
    NSString *deid = [self getDeviceUUID];
    self.mqttSession.clientId = deid;
    // 设置用户名称
    self.mqttSession.userName = @"mqtts";
    // 设置用户密码
    self.mqttSession.password = @"mqtts";
    // 设置会话链接超时时间
    
    dispatch_queue_t quene = dispatch_queue_create("net1", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(quene
                   , ^{
        // 主线程会发生阻塞
        [ self.mqttSession connectAndWaitTimeout:3];

    });
    
}

// 连接状态
- (void)handleEvent:(MQTTSession *)session event:(MQTTSessionEvent)eventCode error:(NSError *)error {

switch (eventCode) {
        case MQTTSessionEventConnected:
            
            NSLog(@"连接成功");
        
            break;
        case MQTTSessionEventConnectionRefused:
            
            NSLog(@"连接被拒绝");
            self.isConnect = NO;
            break;
        case MQTTSessionEventConnectionClosed:
            
            NSLog(@"连接关闭");
         
            
            break;
        case MQTTSessionEventConnectionError:
            
            NSLog(@"连接错误");
         
            break;
        case MQTTSessionEventProtocolError:
            
            NSLog(@"协议不被接受/协议错误");
        
            break;
        case MQTTSessionEventConnectionClosedByBroker:
            
            NSLog(@"其余错误");
        
            break;
            
        default:
            break;
    }
    


}

连接成功之后订阅

- (void)connected:(MQTTSession *)session {
    
    // MQTT连接成功,进行订阅主题 设置主题 服务质量
 
    [session subscribeToTopic:@"订阅"atLevel:MQTTQosLevelAtMostOnce];
    

}

收到消息

- (void)newMessage:(MQTTSession *)session data:(NSData *)data onTopic:(NSString *)topic qos:(MQTTQosLevel)qos retained:(BOOL)retained mid:(unsigned int)mid {
    

    NSString *result =[[ NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
      // 进行下一步操作
    
 
    // 不一定是字符串
     NSLog(@"收到的消息:%@",result);
    

}

发消息

-(void)sendMsg
{
    NSString *str =@"hello---world";
    NSData *data =[str dataUsingEncoding:NSUTF8StringEncoding];
    [self.mqttSession publishData:data onTopic:@"mobtopic" retain:NO qos:MQTTQosLevelAtMostOnce publishHandler:^(NSError *error) {
           
           if (error) {

               // 发送失败则 重新登录 mqtt 进行重发
            //   [self getMQTTServerAnew];
               
           }else {
               //主题发送成功
               NSLog(@"主题 %@ 发送成功", @"所订阅的主题mobtopic");
           }
           
       }];
    
}

相关文章

  • iOS MQTT 应用 使用MQTTClient

    直接上代码,最好写一个单例中去实现 需要特别注意的是 transport.host 后边的地址IP,前面不要加ht...

  • MQTTClient 那些坑

    前段时间做一个智能路由器的项目,要求使用MQTT,研究了几个相关的框架,还是选择MQTTClient,因为他的版本...

  • iOS_MQTT通讯协议

    最近因为项目需要,需要用到MQTT通讯协议,上网了解了一下发现在物联网这种协议经常使用。 MQTTClient的使...

  • iOS MQTTClient使用记录

    MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品...

  • Android客户端通过Paho MQTT和Broker建立SS

    MQTT是物联网时代的基础通讯协议。Paho Mqtt Client是android应用开发中广泛使用的Mqtt ...

  • 在 iOS 中使用 MQTT 协议

    有关 MQTT 协议的概念这里不做过多描述,网上有大把的文章。本文主要讨论 MQTT 协议在 iOS 中的应用。 ...

  • MQTT在iOS方面的实现之MQTTClient

    大家既然搜索了MQTT了肯定就不用我再去解释一些百度百科的知识了 1.git地址 https://github.c...

  • MQTTClient的使用介绍

    开篇 最近在使用MQTTClient实现一个类似于消息推送的服务,说实话,真没怎么使用过MQTTClient,也不...

  • iOS --- MQTTClient

    ----- 更新 目前使用了 MQTTSessionManage 类 来代替之前的 MQTTSession --...

  • iOS MQTTClient

    1、简介: MQTT 是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以...

网友评论

      本文标题:iOS MQTT 应用 使用MQTTClient

      本文链接:https://www.haomeiwen.com/subject/psoejrtx.html