XMPP客戶端開發包 SmackAPI

webphp 12年前發布 | 51K 次閱讀 XMPP 網絡工具包

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收集器和監聽器。

項目主頁:http://www.baiduhome.net/lib/view/home/1326015960796

 本文由用戶 webphp 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!