基於 XMPP協議的即時訊息服務端簡單實現

2021-08-30 10:39:13 字數 1789 閱讀 8311

伺服器端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...