开始

这个文档将会向您介绍Smack API,并且简要介绍一些重要的类和概念。

JAR文件和要求

配置

Smack有一个初始化过程,涉及2个阶段。

  • 初始化系统属性—初始化所有的系统属性可以通过类SmackConfiguration。这些属性检索的getXXX方法类。
  • 初始化启动类——在启动时初始化任何类要积极通过实例化类,然后在继承了SmackInitializer的类中调用初始化方法在该。如果它不继承这个接口,然后初始化必须发生在一个静态的代码块是在加载类时自动执行。

建立连接

XMPPTCPConnection 类是用于创建XMPP服务器的连接。使用以下代码示例进行连接:

  1. // Create a connection to the jabber.org server.
  2. AbstractXMPPConnection conn1 = new XMPPTCPConnection("username", "password" "jabber.org");
  3. conn1.connect();
  4. // Create a connection to the jabber.org server on a specific port.
  5. XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
  6. .setUsernameAndPassword("username", "password")
  7. .setServiceName("jabber.org")
  8. .setHost("earl.jabber.org")
  9. .setPort("8222")
  10. .build();
  11. AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
  12. conn2.connect();

注意,最大安全时将使用默认配置连接到服务器(如果可能的话),包括使用TLS加密。ConnectionConfiguration类提供了先进控制连接创建的,比如禁用或需要加密。

查看完整细节XMPPConnection Management

一旦你已经创建了一个连接,你应该使用 XMPPConnection.login() 方法登录。一旦你登录,你可以创建新的ChatGroupChat 对象与其他用户聊天。

使用 Roster(名单)

Roster 可以让你跟踪其他用户的可用性( presence:状态)。用户可以分成组,如“朋友”和“同事”,然后你会发现每个用户是否在线或离线。

检索使用Roster.getInstanceFor(XMPPConnection)方法。roster 类允许您找到所有名册条目,他们属于的组,和每个条目的存在现状。

读和写功能

每个消息到XMPP服务器从客户端称为数据包并以XML方式发送。包 org.jivesoftware.smack.packet 包含的类,封装了所允许的三种不同类型的基本包类型XMPP ( message, presence, and IQ) 。
ChatGroupChat这样的类提供更高层次的结构,管理自动创建和发送数据包,并且你也可以直接创建和发送数据包。下面是一个代码示例修改你的存在,让人们知道你”不在线”并且是”出去钓鱼”了:

  1. // Create a new presence. Pass in false to indicate we're unavailable._
  2. Presence presence = new Presence(Presence.Type.unavailable);
  3. presence.setStatus("Gone fishing");
  4. // Send the packet (assume we have an XMPPConnection instance called "con").
  5. con.sendStanza(presence);

Smack 提供了两种方式读取传入的数据包:PacketListenerPacketCollector。都使用StanzaFilter实例,以确定哪些数据包应该被处理。数据包监听器是用于事件编程风格,而包收集器有一个结果队列的数据包,你可以查询和阻塞操作。
数据包监听器是有用,当你想采取一些措施当一个数据包发生了进来,而包收集器是有用的,当你想等待一个特定的数据包到达的。Packet collectorslisteners 可以创建使用一个连接实例。