原标题:Smack:一个开源的XMPP用于即时通讯的客户端类库

本资源由 伯乐在线- oneDay整理,您也想贡献一份力量?欢迎加入我们 »

Smack是一个用于和XMPP服务器通信的类库,可以实现即时通讯和聊天。Smack是Spark项目的核心。

示例代码

Java

1

2

3

4

5

6

7

8

// Create a connection to the jabber.org server.

Connection conn1=newXMPPConnection("jabber.org");

conn1.connect();

// Create a connection to the jabber.org server on a specific port.

ConnectionConfiguration config=newConnectionConfiguration("jabber.org",5222);

Connection conn2=newXMPPConnection(config);

conn2.connect();

Smack主要优势

非常简单易用,并且有十分强大的API,只需短短几行代码就可以向用户发送文本消息:

Java

1

2

3

4

5

6

7

AbstractXMPPConnection connection=newXMPPTCPConnection("mtucker","password","jabber.org");connection.connect().login();

Chat chat=ChatManager.getInstanceFor(connection).createChat("jsmith@jivesoftware.com",newMessageListener(){

publicvoidprocessMessage(Chat chat,Message message){

System.out.println("Received message: "+message);

}

});chat.sendMessage("Howdy!");

不像其他类库那样强制你进行包级别的编码。Smack提供了智能的、更高级的构造,像Chat和Roster类,可以让你进行更高效的编程;.你不需要熟悉XMPP XML格式,甚至不需要熟悉XML;提供了简单的机器到机器通讯,Smack允许在每个消息中设置任意数量的属性,包括java对象;Apache许可下的开源类库,这意味着使用者可以将Smack整合进商业的或者非商业的应用中。

关于XMPP

XMPP (E xtensible Messaging and Presence Protocol)是一个由IETF标准化的开放协议,由XMPP标准基金会支持和扩展(http://www.xmpp.org)。

使用前提

Smack的唯一必要条件是JDK 1.2 或更高版本。

需要JAR包

Smack意味着很容易地嵌入到任何现有的Java应用程序中,类库作为Jar文件在应用程序所需的功能上提供更多的灵活性:

smack-core.jar— 提供XMPP核心功能,包括XMPP RFC部分所有XMPP的特征。smack-tcp.jar— 支持基于TCP协议的XMPP,包括你通常需要使用的XMPPTCPConnection类。smack-extensions.jar— 支持众多由XMPP标准基金会定义的扩展(XEPs),包括多用户对话、文件传输、用户搜索等等。这些扩展记录在扩展手册。smack-experimental.jar— 支持由XMPP标准基金会定义的试验的扩展 (XEPs),这些扩展的API和和功能应被视为是不稳定的。smack-legacy.jar— 支持由XMPP标准基金会定义的遗留的扩展。smack-bosh.jar— 支持BOSH(XEP-0124)。此代码应被视为测试版。smack-jingle.jar— 支持Jingle。此代码是旧的, 现在没有了。smack-resolver-dnsjava.jar— 支持借助于dnsjava解决DNS SRV记录 ,是不支持javax.naming接口的理想平台。smack-resolver-javax.jar— 支持解决 DNS SRV 记录借助于javax namespace API。smack-debug.jar— 一种用于协议通信的增强的GUI调试器,当在类路径中找到并启用调试时它会自动被使用。

配置

Smack有一个包含2个阶段的初始化过程。

初始化系统属性 – 初始化所有通过类 SmackConfiguration访问系统属性,这些属性由该类上的getXXX方法检索。初始化启动类 – 初始化任何类意味着在启动时是活跃的,具体操作如下:首先实例化这个类,如果该类扩展了 SmackInitializer,则再调用该类上的初始化函数。如果它没有实现这个接口,那么初始化将会发生在类被加载自动执行静态代码块时。

初始化是通过一个配置文件来完成。默认情况下,Smack会去加载一个Smack jar包下org.jivesoftware.smack/smack- config.xml的文件。这个默认的配置包含一个初始化类的列表去加载。所有需要被初始化的管理型的类都包含在这个初始化列表中。

建立一个连接

XMPPTCPConnection类用于创建到XMPP服务器的连接,下面的代码是创建一个连接的例子:

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

// Create a connection to the jabber.org server.

AbstractXMPPConnection conn1=**new**XMPPTCPConnection("username","password""jabber.org");

conn1.connect();

// Create a connection to the jabber.org server on a specific port.

XMPPTCPConnectionConfiguration config=XMPPTCPConnectionConfiguration.builder()

.setUsernameAndPassword("username","password")

.setServiceName("jabber.org")

.setHost("earl.jabber.org")

.setPort("8222")

.build();

AbstractXMPPConnection conn2=**new**XMPPTCPConnection(config);

conn2.connect();

注意:默认情况下(和可能时)连接到服务器时最大的安全性将被使用,包括使用的TLS加密。ConnectionConfiguration 类在连接创建的时候提供了先进的控制,如禁用和或需要加密的能力。详情请参考XMPPConnection Management。

一旦你创建了一个连接,你需要用XMPPConnection.login()这个方法登录。一旦你登录后,就可以被其他用户通过创建新的聊天或群聊的对象聊天。

操作Roster

花名册(roster)让你保持跟踪其它用户的可用性(存在)。用户可以被分成像“朋友”、“同事”这样的组,从而知道其它的用户在线还是离线。

可以使用XMPPConnection.getRoster()方法检索花名册。你可以用花名册(roster)类查找花名册的所有条目,它们所属的组以及每个条目当前呈现的状态。

读写packet

从客户端以XML格式发送到XMPP服务器的每个消息被称为一个数据包(packet),org.jivesoftware.smack.packet包中包含了一些类,这些类封装了XMPP所允许的三个不同的基本包类型(message,presence和IQ)。像Chat和GroupChat这样的类提供了更高类别的构造能够自动地创建和发送数据包,当然你也可以直接创建和发送数据包。 以下代码是一个将你的当前状态改为“隐身“,从而不被别人看到的例子:

Java

1

2

3

4

5

// Create a new presence. Pass in false to indicate we're unavailable._

Presence presence=newPresence(Presence.Type.unavailable);

presence.setStatus("Gone fishing");

// Send the packet (assume we have an XMPPConnection instance called "con").

con.sendStanza(presence);

Smack提供两种方法读取收到的数据包:PacketListener和PacketCollector。二者都是使用PacketFilter实例来决定哪个数据包应该被处理。数据包监听器(packet listener)用于事件样式的编程,而数据包收集器(packet collector)有一个可以做轮询和阻塞操作的数据包的结果队列。所以,当我们想对一个有可能随时到来的packet采取一些操作时,使用packet监听器;而当我们想等待一个特别的packet到来时,使用packet收集器。数据包包收集器和监听器可以通过XMPPConnection的实例来创建。

开发资源

协议

Smack遵循Apache开源协议发布。

官方网站:http://www.igniterealtime.org/projects/smack/

开源地址:https://github.com/igniterealtime/Smack返回搜狐,查看更多

责任编辑:

java smack jar_Smack:一个开源的XMPP用于即时通讯的客户端类库相关推荐

  1. Android学习笔记--基于XMPP的即时通讯

    一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库 ...

  2. android基于xmpp的即时通讯应用

    xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版, ...

  3. Java实验——设计一个数组模型,用于存储体育项目成绩男生体育项目有足球、长跑和铅球,女生体育项目有跳舞、体操、游泳。设计排序算法,将变量a、b、c中的数值按大小顺利进行互换(从大到小排列)。

    设计一个数组模型,用于存储体育项目成绩:男生体育项目有足球.长跑和铅球,女生体育项目有跳舞.体操.游泳. import java.util.Scanner;public class DataArray ...

  4. 一款 Java 开源的 Spring Boot 即时通讯 IM 聊天系统

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 开篇 电商平台最不能缺的就是即时通讯,例如通知类下发,客服 ...

  5. 一款Java开源的Spring Boot即时通讯IM聊天系统

    前言 开篇 电商平台最不能缺的就是即时通讯,例如通知类下发,客服聊天等.今天,就来给大家分享一个开源的即时通讯系统.如对文章不感兴趣可直接跳至文章末尾,有获取源码链接的方法. 但文章内容是需要你简单的 ...

  6. 开源IM-免费企业即时通讯-恩布互联ENTBOOST 1.4发布,增加管理中心

    恩布互联ENTBOOST发布v1.4版本,主要版本更新内容: 增加恩布平台管理中心,包括应用功能管理.系统配置管理.部门及员工资料导入等功能: 增加实现设置应用功能图标,集成单独应用功能按钮到恩布IM ...

  7. 集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star...

     [AI科技大本营导读]在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了.LibRec 是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测 ...

  8. 一个开源「知乎日报」Android 客户端

    2019独角兽企业重金招聘Python工程师标准>>> 一个知乎日报客户端 - 知乎小报 体验 体验apk 介绍 如你所见,这是一个知乎日报客户端,我给它起名为:知乎小报. 因为有大 ...

  9. 高仿一个微信其实很简单-即时通讯so Easy

    这个项目是我们公司之前从电商项目剥离出来的一个模块,本来只是用来做电商客服用的. 后来电商项目黄了,我和几个哥们就着手重构,剥离出来了这个程序代码,专门根据微信的UI实现了一套. 废话不多说,先看效果 ...

最新文章

  1. leetcode 402. 移掉K位数字(贪心算法)
  2. .Net环境下基于Ajax的MVC方案
  3. ajax预加载html seo,AJAX网页如何实现SEO友好
  4. java单例模式和HashMap的线程安全
  5. AIX5.3安装oracle10g
  6. 想用Python做自动化测试?Python反射机制的应用
  7. kali安装步骤失败 选择并安装软件_7Zip v19.00 软件安装步骤
  8. Linux 下 Tomcat Https
  9. SQL 查询所有表名、字段名、类型、长度、存储过程、视图
  10. php判断是不是手机端访问
  11. IntelliJ IDEA 集成 SVN
  12. 常数除以0的极限是什么_【高数总结求极限方法】百度作业帮
  13. 五子棋等级考试软件的开发(五)
  14. 项目组合管理、项目集管理、项目管理和组织级项目管理之间的关系
  15. 正确区分CRM、OA、协同办公平台
  16. CAD几何引擎和图形引擎的关系
  17. xshell 运行python脚本
  18. phpstorm License Server激活 官网下载版本直接激活
  19. 《2022中国数据智能产业图谱2.0版》重磅发布
  20. 第七天 01.ssh服务 使用堡塔以及xshell等连接linux

热门文章

  1. 搜狗PC权重 麦谈帮API数据接口
  2. 【翻页电子画册制作】云展网教程 | 页角翻页动态效果幅度以及鼠标痕迹
  3. LVGL---windows PC模拟器(Gui-Guider)运行LVGL
  4. java return 1 wex5_求大神解决****ERROR****: 子任务 java 执行失败。
  5. 人体时钟hone hone clock
  6. k8s-redis 集群部署(李作强)
  7. 基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)
  8. clickhouse除数为0时报错
  9. 预言择天记最大的坑!陈长生到底是谁!
  10. 数聚智连IPO过会:年营收17.7亿 险峰、蓝标及高榕是股东