丁香五月亚洲,欧美孕妇XXX高清在线,国产中文资源,精品r视频在线

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。可以使用createChat(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),不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。

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

相關推薦

四虎国产精品永久在线影视| 色哟哟网| 亚洲美女中文字幕| 日韓精品中文一區二區香蕉下載| 亚洲欧洲成人AV电影网| 337p无码视频| 欧美日韩国产精品一区二区在线观看| 久久无码专区外国精品| 色 人妻导航| 91精品国产午夜福利在线观看| 日韩涩区在线| 亚洲欧洲黄色一区| 精品无码一区二区三区色噜噜| 一级毛片无码中文字幕| 伊人中文精品| 精品婷婷一区二区三区| 国产一区二区无码区| 国产自产精品自在线观看| 91在线青青草原| 亚洲国产精品一区二区三区| 2020免费人妻在线视频| 亚洲高清Av一区二区三区| 精品精品国产自在97香蕉蜜芽| 四方五月婷婷| 精品无码在线观看分类玩| 99这里只有精品66视频| 亚洲国产AV无码转区A蜜芽| 日韩国产精品一级毛片在线| 亚洲—区二区三区| 国产av美女尤物一区| 视频国产骚骚视频| 亚洲日韩小说在线观看| 亚洲中文字幕久久大片| 激情五月丁香婷婷亚洲综合| 国产精品拍天天在线强奸| 亚洲AV日韩AV奶水无码| 久久久99人妖| 97人妻碰碰碰无码视频| aaa级久久久无码| 欧美3A黄片| 无码少妇一区二区三区动漫免费看|