java smack jar_Smack:一个开源的XMPP用于即时通讯的客户端类库
原标题: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用于即时通讯的客户端类库相关推荐
- Android学习笔记--基于XMPP的即时通讯
一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库 ...
- android基于xmpp的即时通讯应用
xmpp是一个通信协议.因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议.Android上最常用的组合asmack +openfire.Asmack是smack的android版, ...
- Java实验——设计一个数组模型,用于存储体育项目成绩男生体育项目有足球、长跑和铅球,女生体育项目有跳舞、体操、游泳。设计排序算法,将变量a、b、c中的数值按大小顺利进行互换(从大到小排列)。
设计一个数组模型,用于存储体育项目成绩:男生体育项目有足球.长跑和铅球,女生体育项目有跳舞.体操.游泳. import java.util.Scanner;public class DataArray ...
- 一款 Java 开源的 Spring Boot 即时通讯 IM 聊天系统
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 开篇 电商平台最不能缺的就是即时通讯,例如通知类下发,客服 ...
- 一款Java开源的Spring Boot即时通讯IM聊天系统
前言 开篇 电商平台最不能缺的就是即时通讯,例如通知类下发,客服聊天等.今天,就来给大家分享一个开源的即时通讯系统.如对文章不感兴趣可直接跳至文章末尾,有获取源码链接的方法. 但文章内容是需要你简单的 ...
- 开源IM-免费企业即时通讯-恩布互联ENTBOOST 1.4发布,增加管理中心
恩布互联ENTBOOST发布v1.4版本,主要版本更新内容: 增加恩布平台管理中心,包括应用功能管理.系统配置管理.部门及员工资料导入等功能: 增加实现设置应用功能图标,集成单独应用功能按钮到恩布IM ...
- 集合70多种推荐算法,东北大学老师用Java写了一个开源库,在GitHub上收获近1500个Star...
[AI科技大本营导读]在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了.LibRec 是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测 ...
- 一个开源「知乎日报」Android 客户端
2019独角兽企业重金招聘Python工程师标准>>> 一个知乎日报客户端 - 知乎小报 体验 体验apk 介绍 如你所见,这是一个知乎日报客户端,我给它起名为:知乎小报. 因为有大 ...
- 高仿一个微信其实很简单-即时通讯so Easy
这个项目是我们公司之前从电商项目剥离出来的一个模块,本来只是用来做电商客服用的. 后来电商项目黄了,我和几个哥们就着手重构,剥离出来了这个程序代码,专门根据微信的UI实现了一套. 废话不多说,先看效果 ...
最新文章
- leetcode 402. 移掉K位数字(贪心算法)
- .Net环境下基于Ajax的MVC方案
- ajax预加载html seo,AJAX网页如何实现SEO友好
- java单例模式和HashMap的线程安全
- AIX5.3安装oracle10g
- 想用Python做自动化测试?Python反射机制的应用
- kali安装步骤失败 选择并安装软件_7Zip v19.00 软件安装步骤
- Linux 下 Tomcat Https
- SQL 查询所有表名、字段名、类型、长度、存储过程、视图
- php判断是不是手机端访问
- IntelliJ IDEA 集成 SVN
- 常数除以0的极限是什么_【高数总结求极限方法】百度作业帮
- 五子棋等级考试软件的开发(五)
- 项目组合管理、项目集管理、项目管理和组织级项目管理之间的关系
- 正确区分CRM、OA、协同办公平台
- CAD几何引擎和图形引擎的关系
- xshell 运行python脚本
- phpstorm License Server激活 官网下载版本直接激活
- 《2022中国数据智能产业图谱2.0版》重磅发布
- 第七天 01.ssh服务 使用堡塔以及xshell等连接linux
热门文章
- 搜狗PC权重 麦谈帮API数据接口
- 【翻页电子画册制作】云展网教程 | 页角翻页动态效果幅度以及鼠标痕迹
- LVGL---windows PC模拟器(Gui-Guider)运行LVGL
- java return 1 wex5_求大神解决****ERROR****: 子任务 java 执行失败。
- 人体时钟hone hone clock
- k8s-redis 集群部署(李作强)
- 基于android的网络音乐播放器-回调实现音乐播放及音乐收藏的实现(三)
- clickhouse除数为0时报错
- 预言择天记最大的坑!陈长生到底是谁!
- 数聚智连IPO过会:年营收17.7亿 险峰、蓝标及高榕是股东