伺服器端xmppseverconnection類事件
//在流開始時觸發,一般是最初的響應流
streamparser.onstreamstart += new streamhandler(streamparser_onstreamstart);
//在流結束時觸發,一般是傳送並關閉套接字連線streamparser.onstreamend += new streamhandler(streamparser_onstreamend);
//在接收到流結點時觸發,這是用得最多的,常用的訊息,出席訊息,< iq>請求應答訊息都在這裡處理
streamparser.onstreamelement += new streamhandler(streamparser_onstreamelement);
//此處處理大部份的訊息,包括訊息路由
private void streamparser_onstreamelement(object sender, node e)
else if (e.gettype() == typeof(message))
else if (e.gettype() == typeof(iq))
}
/// /// iq節處理函式
///
/// .
private void processiq(iq iq)
else
break;}}
else if (iq.query.gettype() == typeof(roster))
}
/// /// 處理iq節的雜項資料.
///
/// the iq.
private void processrosteriq(iq iq)
send(iq);
}}
伺服器端開啟監聽5222埠
while (running)
如果收到客戶端請求就非同步呼叫acceptcallback初始化套接字連線
,並為客戶端建立乙個通訊線程,新建初始化套接字連線採用非同步調
用讀取套接字資訊
public xmppseverconnection(socket sock)
: this()
客戶端與伺服器端的互動過程
1客戶端非同步向伺服器端傳送連線請求
2伺服器端收到請求,初始化回應流,並隨機生成一相sessionid
" from="localhost" id="30e3b8c0" >
3等待伺服器返回訊息後客戶端傳送使用者名稱(由於在客戶端採用了非同步呼叫
方式,所以ui介面感覺不到等待)
test
4伺服器端收到使用者名稱等待使用者提供密碼
test
5客戶端提供加密後的密碼
test
e66557d2b67256bf7e9b317a51b6101674a56b5e
miniclient
6伺服器端從資料庫驗證使用者名稱和密碼,並返回結果
iq xmlns="jabber:client" from="localhost" type="result" id="agsxmpp_2" />
7如果返回錯誤,客戶端提示並終斷連線,否則客戶端傳送響應資料
8 伺服器端返回資料
9 客戶端傳送狀態,
10伺服器收到狀態,傳送iq節並通知其它使用者.
專案解決方案和類圖
基於XMPP協議的即時通訊
最近公司的專案需要用到即時通訊技術,就花了一點時間對即時通訊技術進行研究。經過調研發現,通過openfire spark smack就可以實現。廢話不多說,下面我們就來講一下具體的實現。1.什麼叫openfire?openfire是乙個即時通訊伺服器,也稱之為即時通訊平台。它是基於xmpp協議的,大...
基於XMPP協議的WebIM
本篇主要介紹的是xmpp協議與strophe.js的使用 一 匯入必須的檔案及編寫頁面 二 基礎的登入功能 頁面上先新增乙個登入框 id signin class signinpanel name cred for jid 帳號 label type text id jid value for pa...
基於 XMPP協議的伺服器端 檔案互傳的簡單實現
學習一下基於xmpp協議的檔案傳輸,首先假設使用者已經登入,這裡假設clinet send對clinet receive 傳送檔案,這裡記錄了clinet send的傳送和接收xml流記錄 1 傳送請求表示要向clinet test傳送檔案,並傳送檔案大小和檔名 send reams 2 recei...