ObjectiveC-MQTT初次接触
首先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初次接触的更多相关文章
- OC 初次接触
初次接触ObjC时,会发现许多和其它语言不同的地方,会看到很多的+,- ,[ ,] ,@, NS等符号,这些符号在以后的编程中将经常看到,这部分内容在第二节中介绍.先熟悉一下ObjC的代码: #imp ...
- 初次接触json...
这两天发现很多网站显示图片版块都用了瀑布流模式布局的:随着页面滚动条向下滚动,这种布局还会不断加载数据并附加至当前尾部.身为一个菜鸟级的程序员,而且以后可能会经常与网站打交道,我觉得我还是很有必要去尝 ...
- 初次接触GWT,知识点总括
初次接触GWT,知识点概括 前言 本人最近开始研究 GWT(Google Web Toolkit) ,现将个人的一点心得贴出来,希望对刚开始接触 GWT的程序员们有所帮助,也欢迎讨论,共同进步. 先说 ...
- [Docker]初次接触
Docker 初次接触 近期看了不少docker介绍性文章,也听了不少公开课,于是今天去官网逛了逛,发现了一个交互式的小教程于是决定跟着学习下. 仅仅是把认为重点的知识记录下来,不是非常系统的学习和笔 ...
- 初次接触:DirectDraw
第六章 初次接触:DirectDraw 本章,你将初次接触DirectX中最重要的组件:DirectDraw.DirectDraw可能是DirectX中最强大的技术,因为其贯穿着2D图形绘制同时其帧缓 ...
- 初次接触scrapy框架
初次接触这个框架,先订个小目标,抓取QQ首页,然后存入记事本. 安装框架(http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html) ...
- javaweb中的乱码问题(初次接触时写)
javaweb中的乱码问题 在初次接触javaweb中就遇到了乱码问题,下面是我遇到这些问题的解决办法 1. 页面乱码(jsp) 1. 在页面最前方加上 <%@ page language=&q ...
- 初次接触Java
今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...
- -1.记libgdx初次接触
学习一门技术最难的是开发环境变量配置和工具配置,以下为我初次接触libgdx时遇到的问题 几个难点记录下 gradle 直接用下到本地,然后放到d盘,链接到就行(gradle-wrapper.prop ...
- tensorflow初次接触记录,我用python写的tensorflow第一个模型
tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...
随机推荐
- Android View 简析
基于android 4.4上源码分析: setContentView流程: getwindow() ->setContentView() -> installDecor() -> a ...
- zookeeper能做什么?
Zookeeper是Hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zo ...
- js刷新框架子页面的七种方法代码
面以三个页面分别命名为framedemo.html,top.html,button.html为例来具体说明如何做.其中framedemo.html由上下两个页面组成,代码如下: <!DOCTYP ...
- 实验三——for 语句及分支结构else-if
1.本节课学习到的知识点:在本次课中,我学习了for语句的使用,认识了for语句的执行流,明确了三种表达式的意义.以及最常用的实现多分支的else-if语句. 2.实验过程中遇到的问题及解决方法:在本 ...
- Eclipse中全局搜索和更替
Eclipse全局搜索步骤 使用快捷键"ctrl+H"打开文件搜索对话框,选择"File Search"标签,在Containing text中输入你需要搜索 ...
- select两个关联的下拉列表
今天用到两个关联的select,整理一下代码,仅供参考 如下: <html> <head> <meta charset="UTF-8"> < ...
- js制作简单的计算器
学着做了一个简单的计算器!记录记录!哈哈 <!DOCTYPE html> <html> <head> <title>简单的计算器</title&g ...
- bootstrap中如何让响应式图片(img-responsive)水平居中
我们在用bootstrap排版内容的时候,有的时候在内容中需要图片水平居中对齐. 一般情况下,我们的图片都使用了 .img-responsive 类来实现响应式图片.如果需要实现响应式图片水平居中,那 ...
- icon-font与svg
icon font 使用与svg应用分享 icon font 字体概述 css3增加了@font-face属性,传统的浏览器是通过font-family来设置字体,如果系统里没有的话就用其它字体来代替 ...
- [转+整理] Android 分辨率,密度,像素单位说明
Android支持下列所有单位: px(像素):屏幕上的一个点.不同设备显示效果相同,一般我们HVGA代表320×480像素,这个用的比较多.in(英寸):长度单位.mm(毫米):长度单位.pt(磅) ...