程序员人生 网站导航

XMPP客户端库Smack 4.0.6版开发之三

栏目:框架设计时间:2015-01-15 09:06:20

XMPP客户端库Smack 4.0.6版开发之3

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

6、建立连接的例子

XMPPConnection类用于创建1个到XMPP服务器的连接,代码例子以下:

// 创建1个到jabber.org服务器的连接 AbstractXMPPConnection conn1 = new XMPPTCPConnection("username", "password", "jabber.org"); conn1.connect();

// 创建1个到jabber.org服务器指定端口的连接 XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setUsernameAndPassword("username", "password") .setServiceName("jabber.org") .setHost("earl.jabber.org") .setPort("8222) .build(); AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); conn2.connect();

注意,在连接到XMPP服务器时,如果采取默许设置,会使用最大程度的安全,包括TLS加密的利用。ConnectionConfiguration类通过了对创建的连接的高级控制,比如可以开启或关闭加密。
以后可查看文档《XMPPConnection Management》:
https://github.com/igniterealtime/Smack/blob/master/documentation/connections.html
(目前还是无效的)

1旦你创建了1个连接后,你应当调用XMPPConnection.login()方法进行服务器登录。1旦登录后,你就能够通过创建Chat对象或GroupChat对象开始与其他用户聊天了。

7、Roster(名单)的用法

Roster用于跟踪其他用户是不是在线。用户的联系人可以以分组的方式进行组织,比如“好友”、“同事”。然后就能够查看组中的每一个用户是不是在线了。
要检索Roster,使用XMPPConnection.getRoster()方法。Roster类允许你查找所有的Roster实体,和他们属于哪一个组,每一个实体当前的在线状态。

8、读写Packet(数据包)

从客户端发送到XMPP服务器的每条消息都称为1个Packet(数据包)。org.jivesoftware.smack.packet库中包括了XMPP支持的(消息Message、在线状态Presence、IQ)3种不同的基本数据包类型的封装类。而像Chat或GroupChat这样的类则提供了更高层的结构来管理数据包的自动创建和发送。但是,开发者还是可以直接创建和发送数据包的。
下面的代码就是修改自己的在线状态,让其他人知道你不在线。

// 创建新在线状态对象,并设为离线状态 Presence presence = new Presence(Presence.Type.unavailable); presence.setStatus("Gone fishing"); // 发送数据包(假定我们已有XMPPConnection的连接实例con con.sendPacket(presence);

Smack提供了两种读取到来的数据包的方式:PacketListener(包监听器)和PacketCollector(包搜集器)。
二者都使用PacketFilter实例来判断应当处理哪个数据包。
PacketListener(包监听器)用于事件风格的编程,而PacketCollector(包搜集器)有1个数据包的结果队列,你可以做轮询或阻塞等操作。
也就是说,如果你想在数据包到来时履行1些动作,那末包监听器很合适。如果你想等待指定的数据包的到来,那末包搜集器很合适。
包搜集器和包监听器都使用Connection连接实例创建。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐