本文将介绍Smack API 并对主要的类和概念进行描述。
JAR文件 依赖
Smack很容易集成到已有的基于JDK1.5及更高版本的Java应用中。它几乎不依赖其他包(除了 Jingle 语音聊天功能)并且进行了优化,是包尽可能的小。类库被分成几个包,可根据应用需求进行选择,更具灵活性:
- smack.jar -- 提供XMPP核心功能,是唯一所必需的库。所有的XMPP特性,包括XMPP RFCs需要的所有特性。
- smackx.jar -- 支持XMPP标准基金会定义的多种扩展(XEPs),包括多用户聊天,文件传输,用户搜索等。这些都在扩展说明中介绍。( extensions manual)
- smackx-debug.jar -- 增强协议通信GUI调试器。它在classpath中或者调试是,他将自动开启。
建立一个连接
XMPPConnection类被用于和XMPP服务器创建链接。下面的代码展示了如何创建一个连接:// Create a connection to the jabber.org server. Connection conn1 = new XMPPConnection("jabber.org"); conn1.connect(); // Create a connection to the jabber.org server on a specific port. ConnectionConfiguration config = new ConnectionConfiguration("jabber.org", 5222); Connection conn2 = new XMPPConnection(config); conn2.connect();
需要注意的是,当使用默认参数(如果可能)连接服务器是将使用最高安全级别,包括使用TLS加密连接。 ConnectionConfiguration类对连接的创建有较高级的控制,例如禁用或需要加密。请参阅连接管理( Connection Management)的全部细节。
一旦你创建了连接,你应该Connection.login(String username, String password)方法使用用户名和密码登录。你登录后就可以创建新的Chat 或者 GroupChat 对象,和别人聊天。
使用Roster
Roster用来了解其他用户的状态,用户可以进行分组例如“好友”或者“同事”,同时可以看到其他用户是否在线。
名册让您跟踪其他用户的可用性(存在)。用户可以组织成团体,如“朋友”和“同事”,然后你会发现每个用户是否在线或离线。
可以通过Connection.getRoster()方法获取Roster。Roster类名可以然你获取所有的Roster成员,分组归属和成员状态。
读写数据包
每一条从客户端发往数据库的信息就叫做数据包,使用XML格式。org.jivesoftware.smack.packet 包中包含三种XMPP支持的基础数据包类型封装类。 Chat 和 GroupChat类提供自动创建和发送数据包的高级结构的支持,但是也可以自己创建和发送数据包。下面的代买就展示了如何改变你的状态,让其他人知道你现在不在和“"out fishing"。
// Create a new presence. Pass in false to indicate we're unavailable. Presence presence = new Presence(Presence.Type.unavailable); presence.setStatus("Gone fishing"); // Send the packet (assume we have a Connection instance called "con"). con.sendPacket(presence);
Smack有两种方式读取收到的数据包PacketListener和PacketCollector。都是使用PacketFilter实例来确定应该处理哪个信息。数据包监听器监听事件,同时数据包控制器位置一个数据包队列,你既可以做轮询也可以堵塞。如果你想在数据包到达时做些什么,那么数据包监听器就很有用,而入股当你向等待一个特别的数据包,控制器就能派上用场。 数据包监听器和控制器可以使用Connection实例创建。