首先iOS与mac端用的框架是:https://github.com/ckrey/MQTT-Client-Framework

使用CocoaPods导入

pod 'MQTTClient/Websocket' , '~> 0.6.9'

然后服务端用的是Apache Apollo

http://activemq.apache.org/apollo/index.html

然后还需要一个JDK,这里面需要一个关于JAVA_HOME的配置。当时稍微百度了一下。

首先是服务端的配置,安装好之后直接run,服务端就起来了,我们可以看到有一系列的ip地址与端口号。

我们用与MQTT协议与服务器交互的是用TCP链接的ip与端口。

客户端上我们首先打开pod创建的工作空间

需要进行MQTT通讯的类的头文件导入

#import "MQTTClient.h"

同时使该类遵循协议

<MQTTSessionDelegate>

需要进行MQTT的实现文件中

//创建一个传输类型的实例

MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init];

transport.host = @"localhost";//设置传输的主机,这里我是用的是本地服务器,当然也可以使用远程的ip地址。

transport.port = 61613;//传输主机的监听端口

//创建一个任务

MQTTSession *session = [[MQTTSession alloc] init];

session.transport = transport;//设置任务的传输类型

session.delegate = self;//设置任务的代理为当前类

session.userName = @"admin";//设置任务连接使用的用户名

session.password = @"password";//设置任务连接使用的密码

//连接

[session connectWithConnectHandler:^(NSError *error) {

//以下部分是连接完成后执行的block

if (!error){

    //以下部分是订阅一个话题

[session subscribeToTopic:@"topic" atLevel:2 subscribeHandler:^(NSError *error, NSArray<NSNumber *> *gQoss){

if (error) {

NSLog(@"Subscription failed %@", error.localizedDescription);

} else {

NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);

}

}];

}else{

NSLog(@"error:%@",error);

}

}];

//设置任务代理并连接成功之后,收到订阅的话题信息会执行以下

- (void)newMessage:(MQTTSession *)session

data:(NSData *)data

onTopic:(NSString *)topic

qos:(MQTTQosLevel)qos

retained:(BOOL)retained

mid:(unsigned int)mid{

NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"数据:%@",dataStr);

NSLog(@"话题:%@",topic);

}

//若要发送消息

NSString *str = @"Hello";

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

if ([session publishAndWaitData:data

onTopic:@"topic"

retain:NO

qos:MQTTQosLevelAtLeastOnce]){

    //这部分是如果发送消息成功了,可以在这里写发送成功之后的操作

}

然后我的测试是mac一个小窗口,一个iOS的模拟机,都可以成功发送或者收到订阅的信息。

ObjectiveC-MQTT初次接触的更多相关文章

  1. OC 初次接触

    初次接触ObjC时,会发现许多和其它语言不同的地方,会看到很多的+,- ,[ ,] ,@, NS等符号,这些符号在以后的编程中将经常看到,这部分内容在第二节中介绍.先熟悉一下ObjC的代码: #imp ...

  2. 初次接触json...

    这两天发现很多网站显示图片版块都用了瀑布流模式布局的:随着页面滚动条向下滚动,这种布局还会不断加载数据并附加至当前尾部.身为一个菜鸟级的程序员,而且以后可能会经常与网站打交道,我觉得我还是很有必要去尝 ...

  3. 初次接触GWT,知识点总括

    初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...

  4. [Docker]初次接触

    Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔 ...

  5. 初次接触:DirectDraw

    第六章 初次接触:DirectDraw 本章,你将初次接触DirectX中最重要的组件:DirectDraw.DirectDraw可能是DirectX中最强大的技术,因为其贯穿着2D图形绘制同时其帧缓 ...

  6. 初次接触scrapy框架

    初次接触这个框架,先订个小目标,抓取QQ首页,然后存入记事本. 安装框架(http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html) ...

  7. javaweb中的乱码问题(初次接触时写)

    javaweb中的乱码问题 在初次接触javaweb中就遇到了乱码问题,下面是我遇到这些问题的解决办法 1. 页面乱码(jsp) 1. 在页面最前方加上 <%@ page language=&q ...

  8. 初次接触Java

    今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...

  9. -1.记libgdx初次接触

    学习一门技术最难的是开发环境变量配置和工具配置,以下为我初次接触libgdx时遇到的问题 几个难点记录下 gradle 直接用下到本地,然后放到d盘,链接到就行(gradle-wrapper.prop ...

  10. tensorflow初次接触记录,我用python写的tensorflow第一个模型

    tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...

随机推荐

  1. 当云遇见APP性能测试会怎样?

    一个测试人员应该明白,无论是在云内部或是外部,对一个应用程序而言,需要进行测试的地方都是一样的.最终用户只关注的是一个无缺陷的高性能的应用程序,而不关心应用程序位于哪里.在大多数的云服务协议里,都会提 ...

  2. Android之拨号界面图片风格,无信息默认显示界面修改

    Android之拨号界面图片风格,无信息默认显示界面修改 点开Dialer app,出现拨号,联系人,收藏三个选项卡,也就是三个Fragment,在三个界面都没有信息的时候会显示一个时钟,联系人,收藏 ...

  3. centos 6.5重置Root密码

    按任意键进入菜单界面 在开始引导的时候,进入开机启动界面(如下图) 然后按一下键盘上面的"e" 3.进入如下图界面,我这边选择第二个按下键盘上的"e"键.(不同 ...

  4. 常用shell

    常用shell命令 选项 参数 ctrl+alt+f(1-6)字符界面7图形界面 ls 列出当前目录 -a 查看文件的详细信息 -L 查看所有的文件 包括隐藏文件 pwd 查看当前的工作路径 cd 切 ...

  5. 用超链接提交表单,实现在动态网页的url中隐藏参数

    动态网页中怎么隐藏url参数传递 我们在做动态网站的时候往往会在各个页面之间传递参数,而这些参数的名称和值都会在url地址栏中被暴露出来,这样一方面不安全,另一方面也不便于搜索引擎的收录,有的时候还有 ...

  6. 用PHP解析类JSON字符串为数组的实现

    题目:把字符串嵌套关系转换成数组,字符串只包含成对中括号.数字和逗号字符串:(1,(1,2,(1,(1,2,(1)),3)),3,(1,(1,2,((1((1,(1,2,(1,2,3),4,5),3) ...

  7. (转)Tomcat数据源连接池加密

    文章来源 :http://my.oschina.net/cimu/blog/164757 我们在使用Tomcat数据库连接池的时候都是明文存储数据库用户名和密码的,例如: <Resource n ...

  8. ARM、Intel、MIPS处理器啥区别?看完全懂了

    安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小.MIPS在32位和64位嵌入式领 ...

  9. sass入门教程

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 二.安装和使用 2.1 安装 SASS是Ruby语言写的,必须先 ...

  10. Game02 最新版本2.0.0

    Game02发布转站于此,欢迎大家下载.... 简介: Game02是由ImGenius开发的一款即时在线小游戏.玩法简单,易于上手,主要靠技术,不会出现不要脸的充值等内容. 操控方法:W和A左右移动 ...