中文字幕 日本 在线 高清,精品久久久久久久久久久国产字幕,漂亮人妻洗澡被公强日日躁,西西4444wwww大胆视频

Android中基于XMPP協(xié)議實現(xiàn)IM聊天程序與多人聊天室(im協(xié)議 xmpp)

Android中基于XMPP協(xié)議實現(xiàn)IM聊天程序與多人聊天室

更新時間:2016年02月24日 15:59:31 作者:喝醉的毛毛蟲

這篇文章主要介紹了Android中基于XMPP協(xié)議實現(xiàn)IM聊天程序與多人聊天室的方法,XMPP基于XML數(shù)據(jù)格式傳輸,一般用于即時消息(IM)以及在線現(xiàn)場探測,需要的朋友可以參考下

簡單的IM聊天程序

由于項目需要做一個基于XMPP協(xié)議的Android通訊軟件。故開始研究XMPP。

XMPP協(xié)議采用的是客戶端-服務器架構(gòu),所有從一個客戶端發(fā)到另一個客戶端的消息和數(shù)據(jù)都必須經(jīng)過XMPP服務器轉(zhuǎn)發(fā),而且支持服務器間DNS的路由,也就是說可以構(gòu)建服務器集群,使不同的

服務器下的客戶端也可以通信,XMPP的前身是一個開源組織制定的網(wǎng)絡通信協(xié)議——Jabber,XMPP的核心是在網(wǎng)絡上分片段發(fā)送XML流的協(xié)議,這個協(xié)議是XMPP的即時通訊指令的傳遞手段。

為了防止服務器間發(fā)送的數(shù)據(jù)被篡改或偷聽,XMPP服務器通信引入了TLS機制,使用TLS機制能實現(xiàn)數(shù)據(jù)的加密,從而保證了在數(shù)據(jù)傳輸過程種數(shù)據(jù)的安全。

一個XMPP實體的地址稱為Jabber Identifier或JID,作用類似于IP地址。一個合法的JID包括節(jié)點名,域名資源名,其格式為:jid=[node'@']domain['/'resource]

XMPP協(xié)議的命名空間:

在網(wǎng)上找了下,有開源的項目BEEM,開源的用于android的xmpp框架asmack,asmack是smack的android版本?,F(xiàn)在開始學習smack

。Xmpp就是神馬東西,就不廢話了。首先在網(wǎng)上下一個Openfire和Spack,不知道這兩個是什么東西,就直接google吧。安裝openfire需要mysql的支持,當然,oracle,sqlserver肯定是可以的。還是先上圖吧:

Openfire Spark MyXMPPP

Android中基于XMPP協(xié)議實現(xiàn)IM聊天程序與多人聊天室(im協(xié)議 xmpp)

Android中基于XMPP協(xié)議實現(xiàn)IM聊天程序與多人聊天室(im協(xié)議 xmpp)

import java.io.InputStreamReader; import java.util.Collection; import org.jivesoftware.smack.Chat; import org.jivesoftware.smack.ChatManager; import org.jivesoftware.smack.ChatManagerListener; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.MessageListener; import org.jivesoftware.smack.PrivacyListManager; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.RosterEntry; import org.jivesoftware.smack.RosterGroup; import org.jivesoftware.smack.RosterListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Presence; public class TestSmack { public static void main(String[] args) {XMPPConnection.DEBUG_ENABLED = true; //我的電腦IP:10.16.25.90 final ConnectionConfiguration connectionConfig = new ConnectionConfiguration("10.16.25.91", 5222, ""); connectionConfig.setSASLAuthenticationEnabled(false); try { XMPPConnection connection = new XMPPConnection(connectionConfig); connection.connect();//連接 connection.login("test", "test");//登陸 System.out.println(connection.getUser()); ChatManager chatmanager = connection.getChatManager(); //新建一個會話 Chat newChat = chatmanager.createChat("test3@pc2010102716", new MessageListener() { public void processMessage(Chat chat, Message message) { System.out.println("Received from 【" message.getFrom() "】 message: " message.getBody()); } }); // 監(jiān)聽被動接收消息,或廣播消息監(jiān)聽器 chatmanager.addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean createdLocally) { chat.addMessageListener(new MessageListener() { @Override public void processMessage(Chat chat, Message message) { System.out.println("Received from 【" message.getFrom() "】 message: " message.getBody()); } }); } }); //發(fā)送消息 newChat.sendMessage("我是菜鳥"); //獲取花名冊 Roster roster = connection.getRoster(); Collection entries = roster.getEntries(); for(RosterEntry entry : entries) { System.out.print(entry.getName() " – " entry.getUser() " – " entry.getType() " – " entry.getGroups().size()); Presence presence = roster.getPresence(entry.getUser()); System.out.println(" – " presence.getStatus() " – " presence.getFrom()); } //添加花名冊監(jiān)聽器,監(jiān)聽好友狀態(tài)的改變。 roster.addRosterListener(new RosterListener() { @Override public void entriesAdded(Collection addresses) { System.out.println("entriesAdded"); } @Override public void entriesUpdated(Collection addresses) { System.out.println("entriesUpdated"); } @Override public void entriesDeleted(Collection addresses) { System.out.println("entriesDeleted"); } @Override public void presenceChanged(Presence presence) { System.out.println("presenceChanged – >" presence.getStatus()); } }); //創(chuàng)建組 // /RosterGroup group = roster.createGroup("大學"); // for(RosterEntry entry : entries) { // group.addEntry(entry); // } for(RosterGroup g : roster.getGroups()) { for(RosterEntry entry : g.getEntries()) { System.out.println("Group " g.getName() " >> " entry.getName() " – " entry.getUser() " – " entry.getType() " – " entry.getGroups().size()); } } //發(fā)送消息 BufferedReader cmdIn = new BufferedReader(new InputStreamReader(System.in)); while(true) { try { String cmd = cmdIn.readLine(); if("!q".equalsIgnoreCase(cmd)) { break; } newChat.sendMessage(cmd); }catch(Exception ex) { } } connection.disconnect(); System.exit(0); } catch (Exception e) { e.printStackTrace(); } } }

以上代碼如果在一般的Java Project上運行需要加入smack.jar 和klmx2.jar,如果是Android Project,基本代碼不需改變只需將其放入onCreate(…)方法下即可,需要加入asmack.jar包.

1、ConnectionConfiguration

作為用于與XMPP服務建立連接的配置。它能配置;連接是否使用TLS,SASL加密。

包含內(nèi)嵌類:ConnectionConfiguration.SecurityMode

2、XMPPConnection.

XMPPConnection這個類用來連接XMPP服務.

可以使用connect()方法建立與服務器的連接。disconnect()方法斷開與服務器的連接.

在創(chuàng)建連接前可以使用XMPPConnection.DEBUG_ENABLED = true; 使開發(fā)過程中可以彈出一個GUI窗口,用于顯示我們的連接與發(fā)送Packet的信息。

Android中基于XMPP協(xié)議實現(xiàn)IM聊天程序與多人聊天室(im協(xié)議 xmpp)

3、ChatManager

用于監(jiān)控當前所有chat??梢允褂胏reateChat(String userJID, MessageListener listener)創(chuàng)建一個聊天。

4、Chat

Chat用于監(jiān)控兩個用戶間的一系列message。使用addMessageListener(MessageListener listener)當有任何消息到達時將會觸發(fā)listener的processMessage(Chat chat, Message message)

方法.

我們可以使用sendMessage()發(fā)送消息,這個方法有兩個重載方法,一種類類型的參數(shù)時String類型,另一種則是傳入Message對象(后面介紹)。

那么有這樣一種情況,當別人主動跟我們建立連接發(fā)送消息,或者系統(tǒng)發(fā)送消息時我們怎么才能接收消息呢?

我現(xiàn)在是這樣操作的:

chatmanager.addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean createdLocally) { chat.addMessageListener(new MessageListener() { @Override public void processMessage(Chat chat, Message message) { System.out.println("Received message: " message.getBody()); } }); } });

5、Message

6、Roster

表示存儲了很多RosterEntry的一個花名冊.為了易于管理,花名冊的項被分貝到了各個group中.

當建立與XMPP服務的連接后可以使用connection.getRoster()獲取Roster對象。

別的用戶可以使用一個訂閱請求(相當于QQ加好友)嘗試訂閱目的用戶??梢允褂妹杜e類型Roster.SubscriptionMode的值處理這些請求:

accept_all: 接收所有訂閱請求

reject_all:拒絕所有訂閱請求

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。

(0)
上一篇 2024年9月14日 上午9:49
下一篇 2024年9月14日 上午10:00

相關(guān)推薦

  • 招標信息-中國煙草總公司河北省公司工商零消一體化營銷管理平臺

    1.招標條件 本招標項目中國煙草總公司河北省公司工商零消一體化營銷管理平臺項目已由/以/批準建設,項目業(yè)主為中國煙草總公司河北省公司,建設資金來自自籌,出資比例為100%,招標人為…

    科研百科 2024年6月14日
    40
  • 統(tǒng)信 UOS 最新適配應用一覽,已覆蓋常見應用

    IT之家 12 月 17 日消息 統(tǒng)信軟件宣布,2020 年以來,統(tǒng)信軟件在生態(tài)適配上進展迅速,已經(jīng)與 1500 合作伙伴,完成了 19000 余次適配服務。IT之家獲悉,統(tǒng)信已完…

    科研百科 2023年4月26日
    793
  • 項目信息化管理制度(科研項目信息化管理)

    科研項目信息化管理科研項目信息化管理(學科交叉學科)高校學科交叉學科的具體課程包括:醫(yī)學(化學)、管理學(計算機科學)、信息科學(物理學)、物理(計算機科學)、經(jīng)濟學(計算機科學)…

    科研百科 2024年5月19日
    35
  • 建文項目管理系統(tǒng)

    建文項目管理系統(tǒng): 創(chuàng)新項目管理的利器 隨著現(xiàn)代商業(yè)競爭的加劇,企業(yè)需要更加高效地管理其項目,以確保項目按時、按質(zhì)、按量完成。為了滿足這一需求,企業(yè)開始采用各種項目管理系統(tǒng),以提高…

    科研百科 2024年8月18日
    5
  • 中車協(xié)同辦公系統(tǒng)

    中車協(xié)同辦公系統(tǒng): 推動中車數(shù)字化轉(zhuǎn)型的關(guān)鍵 隨著數(shù)字化時代的到來,中車的數(shù)字化轉(zhuǎn)型已成為其發(fā)展的必然趨勢。中車協(xié)同辦公系統(tǒng)作為中車數(shù)字化轉(zhuǎn)型的重要組成部分,其重要性不言而喻。本文…

    科研百科 2025年1月3日
    13
  • 3D管路設計軟件有

    3D管路設計軟件: 打造完美管路造型 隨著3D打印技術(shù)的不斷發(fā)展,管路設計軟件也逐漸成為了人們?nèi)粘I钪胁豢苫蛉钡墓ぞ摺?D管路設計軟件可以讓設計師輕松制作出復雜的管路造型,從而在…

    科研百科 2024年11月27日
    0
  • 怎樣梳理科研項目成果

    梳理科研項目成果是科研工作中非常重要的一步,可以幫助我們更好地總結(jié)和展示研究成果,為后續(xù)的研究工作提供參考和支持。在梳理科研項目成果時,我們應該遵循一定的方法和步驟,以下是一些建議…

    科研百科 2025年4月6日
    6
  • 尚水的涵義

    尚水,是指崇尚和水一樣清潔,美好,純凈的特質(zhì)。這種特質(zhì)在我們的生活中無處不在,它代表著一種追求美好,追求卓越的態(tài)度,一種珍惜生命,保護環(huán)境的意識。 水是生命之源,我們身體中每一個細…

    科研百科 2024年10月25日
    6
  • 大型會議管理系統(tǒng)

    大型會議管理系統(tǒng)是一種用于管理大型會議的軟件系統(tǒng),可以幫助組織者高效地組織、管理和跟蹤會議,確保會議的順利進行。 隨著現(xiàn)代社會的快節(jié)奏和高效率,越來越多的組織開始使用大型會議管理系…

    科研百科 2024年9月21日
    4
  • 華陰市水務局一行視察華陰市灌溉管理工作站支部黨建工作(華陰市水務局領(lǐng)導名單)

    渭南青年網(wǎng)(編輯/陽光通訊員/李麥娟)3月2日下午,華陰市灌溉管理工作站迎來以水務局柴志書記帶隊,組織部三位領(lǐng)導及水務局各基層12位支部書記組成的黨建工作觀摩巡診團視察工作。通過聽…

    科研百科 2023年11月12日
    147