狠狠色噜噜狠狠狠狠2021,久久精品国产亚洲av麻豆白洁,777米奇影视盒,国内精品老年人视频网站

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

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

更新時(shí)間:2016年02月24日 15:59:31 作者:喝醉的毛毛蟲(chóng)

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

簡(jiǎn)單的IM聊天程序

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

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

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

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

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

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

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

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

Openfire Spark MyXMPPP

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

Android中基于XMPP協(xié)議實(shí)現(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(); //新建一個(gè)會(huì)話 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)聽(tīng)被動(dòng)接收消息,或廣播消息監(jiān)聽(tīng)器 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("我是菜鳥(niǎo)"); //獲取花名冊(cè) 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()); } //添加花名冊(cè)監(jiān)聽(tīng)器,監(jiān)聽(tīng)好友狀態(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("大學(xué)"); // 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上運(yùn)行需要加入smack.jar 和klmx2.jar,如果是Android Project,基本代碼不需改變只需將其放入onCreate(…)方法下即可,需要加入asmack.jar包.

1、ConnectionConfiguration

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

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

2、XMPPConnection.

XMPPConnection這個(gè)類用來(lái)連接X(jué)MPP服務(wù).

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

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

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

3、ChatManager

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

4、Chat

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

方法.

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

那么有這樣一種情況,當(dāng)別人主動(dòng)跟我們建立連接發(fā)送消息,或者系統(tǒng)發(fā)送消息時(shí)我們?cè)趺床拍芙邮障⒛兀?/p>

我現(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

表示存儲(chǔ)了很多RosterEntry的一個(gè)花名冊(cè).為了易于管理,花名冊(cè)的項(xiàng)被分貝到了各個(gè)group中.

當(dāng)建立與XMPP服務(wù)的連接后可以使用connection.getRoster()獲取Roster對(duì)象。

別的用戶可以使用一個(gè)訂閱請(qǐng)求(相當(dāng)于QQ加好友)嘗試訂閱目的用戶。可以使用枚舉類型Roster.SubscriptionMode的值處理這些請(qǐng)求:

accept_all: 接收所有訂閱請(qǐng)求

reject_all:拒絕所有訂閱請(qǐng)求

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

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

相關(guān)推薦

  • 超市管理系統(tǒng)項(xiàng)目編碼

    超市管理系統(tǒng)項(xiàng)目編碼:XXX 超市管理系統(tǒng)是一種用于管理超市內(nèi)部業(yè)務(wù)流程的軟件系統(tǒng),能夠幫助超市更好地管理商品銷售、庫(kù)存管理、員工管理、財(cái)務(wù)管理等多個(gè)方面。以下是一篇關(guān)于超市管理系…

    科研百科 2024年12月26日
    3
  • 杭州c類人才認(rèn)定條件

    杭州c類人才認(rèn)定條件 隨著杭州城市的快速發(fā)展和人們對(duì)生活品質(zhì)的要求不斷提高,c類人才的定義也變得越來(lái)越模糊。c類人才是指那些具有較高技能、創(chuàng)新能力和創(chuàng)業(yè)精神的人才,他們能夠?yàn)楹贾莸?#8230;

    科研百科 2024年10月25日
    64
  • 低代碼平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)方案

    低代碼平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)方案 隨著數(shù)字化進(jìn)程的加速,越來(lái)越多的企業(yè)開(kāi)始采用低代碼平臺(tái)來(lái)簡(jiǎn)化軟件開(kāi)發(fā)流程,提高開(kāi)發(fā)效率,降低開(kāi)發(fā)成本。低代碼平臺(tái)是一種基于可視化編程語(yǔ)言的軟件開(kāi)發(fā)工具,…

    科研百科 2024年10月15日
    6
  • 科研管理包括哪些內(nèi)容

    科研管理包括哪些內(nèi)容 科研管理是指在科研項(xiàng)目的整個(gè)生命周期中,對(duì)科研活動(dòng)進(jìn)行的計(jì)劃、組織、協(xié)調(diào)、控制和監(jiān)督,以確??蒲谢顒?dòng)的有效進(jìn)行和成果的實(shí)現(xiàn)??蒲泄芾戆ㄒ韵轮饕獌?nèi)容: 1. …

    科研百科 2024年10月12日
    6
  • 項(xiàng)目管理軟件離線

    項(xiàng)目管理軟件離線 隨著數(shù)字化時(shí)代的到來(lái),項(xiàng)目管理軟件已經(jīng)成為了項(xiàng)目管理中不可或缺的工具。無(wú)論是大型項(xiàng)目還是小型項(xiàng)目,項(xiàng)目管理軟件都可以幫助企業(yè)有效地組織和管理項(xiàng)目,提高項(xiàng)目的效率和…

    科研百科 2024年7月23日
    1
  • 某集團(tuán)有限公司投資管理辦法及投資項(xiàng)目負(fù)面清單(33頁(yè))(投資項(xiàng)目的負(fù)面清單管理制度)

    目錄 第一章 總 則 第一節(jié) 概 述 第二節(jié) 項(xiàng)目投資的基本原則 第二章 管理流程、管理部門及負(fù)面清單制度 第一節(jié) 管理流程、管理部門及職責(zé) 第二節(jié) 負(fù)面清單制度 第三章 投資預(yù)算…

    科研百科 2022年11月1日
    396
  • 國(guó)家民委高等教育教學(xué)改革研究項(xiàng)目

    國(guó)家民委高等教育教學(xué)改革研究項(xiàng)目 近年來(lái),隨著國(guó)家民委對(duì)高等教育的重視和投入的不斷增加,高等教育教學(xué)改革研究項(xiàng)目得到了越來(lái)越多的關(guān)注。本項(xiàng)目旨在通過(guò)改革教學(xué)內(nèi)容、教學(xué)方法和評(píng)價(jià)方式…

    科研百科 2024年11月8日
    1
  • 科研項(xiàng)目延保條款怎么寫

    科研項(xiàng)目延保條款怎么寫 隨著科技的不斷進(jìn)步,科研項(xiàng)目已經(jīng)成為許多企業(yè)和機(jī)構(gòu)的重要收入來(lái)源。然而,由于科研項(xiàng)目的復(fù)雜性和不確定性,科研項(xiàng)目的進(jìn)度和成果往往受到時(shí)間和資金的限制。為了保…

    科研百科 2025年2月3日
    1
  • 受歡迎的學(xué)校短信應(yīng)用Seesaw遭黑客攻擊 向家長(zhǎng)發(fā)送露骨的圖像(校園短信平臺(tái))

    據(jù)NBC News報(bào)道,一款供家長(zhǎng)和教師使用的短信應(yīng)用的開(kāi)發(fā)商周三表示,其應(yīng)用遭到黑客攻擊,因?yàn)橐恍┘议L(zhǎng)說(shuō)他們收到了帶有一張?jiān)诨ヂ?lián)網(wǎng)上臭名昭著的露骨照片的信息。伊利諾伊州、紐約州、…

    科研百科 2023年5月1日
    267
  • 協(xié)同辦公即時(shí)通訊

    協(xié)同辦公即時(shí)通訊: 讓辦公更高效 隨著數(shù)字化時(shí)代的到來(lái),協(xié)同辦公即時(shí)通訊已經(jīng)成為現(xiàn)代辦公必不可少的工具之一。無(wú)論是內(nèi)部協(xié)作還是外部溝通,協(xié)同辦公即時(shí)通訊都可以讓我們的工作更加高效和…

    科研百科 2025年1月5日
    2