XMPP客戶端開發包 SmackAPI
Smack是一個用于和XMPP服務器通信的類庫,由此可以實現即時通訊和聊天。
Smack主要優勢
非常簡單易用,并且有十分強大的 API。只需三行代碼就可以向用戶發關文本消息:
XMPPConnection connection = new XMPPConnection("jabber.org"); connection.login("mtucker", "password"); connection.createChat("jsmith@jivesoftware.com").sendMessage("Howdy!");
不像其它類庫那樣強制您進行包級別的編碼。Smack提供智能的更高級的構造,像 Chat和GroupChat類,讓您進行高效的編程。
不需用您熟悉XMPP XML格式,即使您熟悉 XML.
提供簡單的設計以進行通訊,Smack允許您在每個消息中設置任意數量的屬性,包括java對象。
Apache許可下的開源類庫,這意味著您可以將Smack整合進您的商業或非商業的應用中。
關于 XMPP
XMPP (eXtensible Messaging and Presence Protocol)是一個由Jabber Software Foundation (http://www.jabber.org)領導的開放的基于XML的協議,并且獲得了 IETF的批準。
怎樣使用該文檔
在使用該文檔時假設您已經了解XMPP即時通訊的主要特征。在您閱讀該文檔的同時強烈建議您打開 Javadoc API 幫助文檔作為參考。
這個文檔將會向您介紹Smack API,并且簡要介紹一些重要的類和概念。
必要條件
Smack的唯一必要條件是JDK 1.2 或更高版本1。smack.jar文件已包含一個XML解析器,不需要其它第三方類庫。
1 JDK 1.2 and 1.3 用戶如果想使用SSL連接則classpath在中必須存在JSSE類庫。
建立連接
XMPPConnection類用來建立到XMPP服務器的連接。要建立SSL連接,要使用SSLXMPPConnection類。下面是建立連接的例子:
// 建立一個到jabber.org服務器的連接。 XMPPConnection conn1 = new XMPPConnection("jabber.org"); // 通過一個特殊的端口建立一個到jabber.org服務器的連接。 XMPPConnection conn2 = new XMPPConnection("jabber.org", 5222); // 建立一個到jabber.org服務器的SSL連接。 XMPPConnection connection = new SSLXMPPConnection("jabber.org");
一旦您建立了一個連接,您必須通過方法XMPPConnection.login(String username, String password)使用用戶名和密碼登陸。如果登陸成功,您可以通過創建新的Chat或GroupChat對象和其它用戶聊天。
操作Roster
Roster能夠讓您跟蹤其它用戶的有效性(存在)。您可以通過使用像“朋友”和“同事”這樣的組來組織用戶,這樣您可以發現每個用戶是否在線。
使用XMPPConnection.getRoster()這個方法得到Roster。通過Roster類您可以找到所有Roster登陸、他們所屬的組以及每個登陸當前的存在狀態。
讀寫Packet
從客戶端以XML格式發送到XMPP服務器的每個消息被稱為一個“packet”。org.jivesoftware.smack.packet包中包含了一些類,這些類封裝了XMPP所允許的三個不同的基本packet類型(message, presence, 和 IQ)。 像Chat和GroupChat這樣的類提供了更高類別的構造能夠自動地創建和發送packet,但是您也可以直接創建和發送packet。 下面是一個通過改變您的presence來讓別人知道您已無效,已經"out fishing"了:
// 創建一個新的presence. 傳入false以指示我們已經無效了 Presence presence = new Presence(Presence.Type.UNAVAILABLE); presence.setStatus("Gone fishing"); // 發送packet (假設已經有了一個名為"con"的XMPPConnection實例). con.sendPacket(presence);
Smack 提供兩種方法讀取收到的packet:PacketListener[packet監聽器]和PacketCollector[packet收集器]。 二者都是使用PacketFilter實例來決定哪個packet應該被處理。packet監聽器用于事件樣式的編程,而packet收集器有一個可以做輪詢和阻塞操作的packet的結果隊列。所以,當您想對一個有可能隨時到來的packet采取一些操作時,使用packet監聽器;而當您想等待一個特別的packet到來時,使用packet收集器。您可以使用XMPPConnection實例創建packet收集器和監聽器。