1、XMPPConnection:它主要是用来创建一个跟XMPP服务端的Socket连接。它是与Jabber服务端的默认连接并且已经在RFC 3920中精确定义过了。示例如下:

    XMPPConnection connection=new XMPPConnection(configuration);

    connection.connect();

2、ConnectionConfiguration:当我们要建立跟服务端的连接时通过它来进行一些配置一些连接参数。例如,你可以通过它来配置trustore文件(保持信任的CA根证书)的存放路径。也可以启用和关闭一系列服务端证书验证的校验步骤。示例如下:

    ConnectionConfiguration cf =new ConnectionConfiguration(SERVER_HOST,SERVER_PORT);

    config.setReconnectionAllowed(true);

    config.setSendPresence(true);

    config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);

    config.setSASLAuthenticationEnabled(false);

    File file =new File("/mnt/sdcard/security/");

    file.mkdirs();

    config.setTruststorePath("/mnt/sdcard/security/cf.bks");

    config.setTruststorePassword("123456");

    config.setTruststoreType("bks");

    config.setSASLAuthenticationEnabled(true);

3、ProviderManager: 主要是管理解析XMPP packets自定义XML子文档的providers,主要存在两种providers:

  1. IQProvider: 将IQ请求解析到Java对象中。(PS:IQ--Info/Query,即信息与查询,它为XMPP通信提供请求与响应机制。它与HTTP协议的基本工作原理非常相似,允许获取和设置查询,与HTTP 的GET 和POST 动作类似。每个iq都必须有一个响应,通过必需的id 属性将响应与导致该响应的请求关联起来。主要由Get/Set/Result/Error四个节点属性)。
  2. PacketExtension:将依附于packets的XML子文档解析到PacketExtension实例中,主要是作扩展用,以后再补充。

  如果你想提供一个你自己定义的provider manager,你必须要在创建连接之前,即调用connection.connect()之前通过setInstance(ProviderManager)静态方法设置你的 provider manager。因为在创建连接之后再试图改变provider manager会报IllegalStateException异常。

4、Registration:代表一个注册的packets,其中,可以通过一个空的GET查询来获取服务端的所支持的注册信息;也可以通过一个SET来创建账号或者更新账号信息。账号一般应包括以下几个属性(不是必须的,你也可以添加你自己的属性):

  1、name -- the user's name.

  2、first -- the user's first name.

  3、last -- the user's last name.

  4、email -- the user's email address.

  5、city -- the user's city.

  6、state -- the user's state.

  7、zip -- the user's ZIP code.

  8、phone -- the user's phone number.

  9、url -- the user's website.

  10、date -- the date the registration took place.

  11、misc -- other miscellaneous information to associate with the account.

  12、text -- textual information to associate with the account.

  13、remove -- empty flag to remove account.

5、PacketFilter:通过一个boolean accept(Packet packet)方法来过滤packet的一些特殊属性,如packetID、packetType等。当我们要创建一个listeners或者collectors,就可以通过PacketFilter来过滤我们不需要关注的packet。Smack已经为我们已经预定义了一些PacketFilter,如果想多个PacketFilter组合使用,那就要使用AndFilter(即满足所有过滤条件才处理)和OrFilter(满足其中一个过滤条件就处理)了。当然,我们也可以自定义自己的PacketFilter,只要实现PacketFilter接口即可。

6、PacketListener:提供了通过一个特定的PacketFilter来监听packets的机制。它基于事件的编程风格,每当一个新的packet被发现,processPacket(Packet)方法就会被触发。

7、PacketCollector:提供了通过PacketFilter将一个或多个特定packets收集到一个结果队列中的机制。通过它可以实现阻塞和轮询结果队列。因此,当我们要等待一个更为具体的结果时,PacketCollector比PacketListener更好一些。需要注意的是,每一个PacketCollector的结果队列的限制是2~16,如果大于16,那第一个将被自动移除。

8、Roster:代表了一个用户的花名册,即一个用户收到的一系列其他用户的存在(Presence)。花名册通过分组可以更为容易管理。一个用户可以通过订阅另外一个用户通过一个请求,主要由以下三个请求模式:

  1、Accept al--接收所有。

  2、Reject all--拒绝所有。

  3、Manual-----自动处理所有请求。订阅请求将会被忽视,如果你要处理,需要注册一个listener去监听存在的packets.

9、Presence:代表XMPP存在的packets,使用它主要有两个目的:1、让服务端知道客户端当前的状态,2、从花名册(Roster)中订阅与取消订阅用户,每一个存在的packet都有一个类型,如:

  1、available -- (默认) 用户可以接受和发送消息

  2、unavailable –用户不可以接受和发送消息

  3、subscribe --请求订阅的收件人的存在。

  4、subscribed –允许订阅的发件人的存在。

  5、unsubscribe --请求移除订阅的收件人的存在。

  6、unsubscribed --允许移除订阅的发件人的存在。

  7、error – 包含错误信息的存在。

  下面的属性是可选的:

  1、Status--一个用来描述用户存在格式自由的文本,如“在线”、“离线”、“我不在“….

  2、Priority—发件人的优先级,值越大优先级越高,该值不能为负数。

  3、Mode—有available (默认), chat, away, xa (扩展的away), and dnd (不要打扰).

Xmpp学习之Asmack取经-asmack入门(一)的更多相关文章

  1. Xmpp学习之Android-smack入门指导

    Xmpp学习之Android-smack入门指导 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/69404 ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. Openfire/XMPP学习之——一个简单的Smack样例

    昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...

  4. IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)

    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...

  5. XMPP学习——3、XMPP协议学习补充

    流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XM ...

  6. JavaWeb学习总结(一)——JavaWeb开发入门

    http://www.cnblogs.com/xdp-gacl/p/3729033.html 只为成功找方法,不为失败找借口! JavaWeb学习总结(一)--JavaWeb开发入门 一.基本概念 1 ...

  7. jQuery学习笔记 - 基础知识扫盲入门篇

    jQuery学习笔记 - 基础知识扫盲入门篇 2013-06-16 18:42 by 全新时代, 11 阅读, 0 评论, 收藏, 编辑 1.为什么要使用jQuery? 提供了强大的功能函数解决浏览器 ...

  8. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  9. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

随机推荐

  1. VUE之命令行报错:Expected indentation of 4 spaces but found 6

    使用vue时候,经常被一大片警告惊呆了,这是webpack默认的语法检查插件ESLint在做警告, [ESLint是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确.风格统一的代码] 但是我 ...

  2. BZOJ 1044 木棍分割(二分答案 + DP优化)

    题目链接  木棍分割 1044: [HAOI2008]木棍分割 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3830  Solved: 1453[S ...

  3. Tyvj——P1952 Easy

    http://www.tyvj.cn/p/1952 描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是 ...

  4. 第1章 CentOS安装

    一.安装说明 1.1 CentOS介绍               CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux ...

  5. hadoop之hdfs------------------FileSystem及其源码分析

    FileSystem及其源码分析 FileSystem这个抽象类提供了丰富的方法用于对文件系统的操作,包括上传.下载.删除.创建等.这里多说的文件系统通常指的是HDFS(DistributedFile ...

  6. Linux下挂载指定分区下的某个文件夹到指定目录(mount)

    # 挂载 mount --bind olddir newdir # 卸载 umount newdir 参考: http://www.cnblogs.com/dabaopku/archive/2010/ ...

  7. Mac环境下安装运行splash

    http://blog.csdn.net/chenhy8208/article/details/69391097 最近需要使用scrapy爬虫做一些开发,用到了splash.我本机是mac环境,跳着看 ...

  8. Understand the Business Domain

     Understand the Business Domain Mark Richards EFFECTivE SoFTWARE ARCHiTECTS understand not only tec ...

  9. mycat安装和测试

    mycat安装和测试 一.  环境准备 本机环境是三台centos6.5 IP 主机名 数据库名 安装软件 192.168.17.4 master db1 mycat,mysql 192.168.17 ...

  10. 学会用core dump调试程序错误

    最来在项目中遇到大型程序出现SIGSEGV ,一直不知道用core dump工具来调试程序,花了近一周的时间,才定位问题,老大很生气,后果很严重,呵呵,事后仔细学习了这块的知识,了解一点core du ...