王小瓊 陳得友
摘要:當(dāng)前中國(guó)的互聯(lián)網(wǎng)技術(shù)已經(jīng)進(jìn)入了一個(gè)飛速發(fā)展的時(shí)期,即時(shí)通訊成為了網(wǎng)絡(luò)通信工具的主流。本論文就是模擬QQ聊天軟件,開發(fā)一個(gè)包括文字聊天、文件傳輸?shù)裙δ艿牧奶燔浖?。系統(tǒng)采用C/S架構(gòu),基于.NET平臺(tái)開發(fā)。由服務(wù)器端和客戶端程序組成,采用TCP/IP通信協(xié)議,使用XML對(duì)通信報(bào)文進(jìn)行封裝,便于應(yīng)用程序API調(diào)用,組裝,解析XML報(bào)文。主要完成文字聊天、文件傳輸、服務(wù)器模塊的設(shè)計(jì)任務(wù)。通過運(yùn)行、測(cè)試與分析,該多功能聊天軟件運(yùn)行穩(wěn)定、可靠,具有一定的實(shí)用價(jià)值。
關(guān)鍵詞:聊天軟件;文字聊天;文件傳輸;C#;XML
一、研究的意義
21世紀(jì)是信息的時(shí)代,隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,信息在傳遞方面也有了嶄新的一面?,F(xiàn)今聊天軟件成為信息傳遞最為廣泛的應(yīng)用工具,它發(fā)揮了即時(shí)性通信的特點(diǎn),可以讓用戶在第一時(shí)間內(nèi)得到信息的交流,它不僅可以讓用戶進(jìn)行文字聊天,而且還增添語音、視頻功能。這樣可以讓網(wǎng)上的好友身臨其境的面對(duì)面的聊天,讓彼此之間更為深入的了解。人性化的設(shè)計(jì)讓每個(gè)用戶都可以得心應(yīng)手的使用,從而獲得更多人的青睞。Internet的出現(xiàn)連通了整個(gè)世界,而聊天軟件的出現(xiàn)則連通了每一位網(wǎng)上的用戶。
二、需求分析
此次開發(fā)的網(wǎng)絡(luò)聊天工具可作為企業(yè)局域網(wǎng)的交流工具使用,通信的安全性不是很高,但要求信息的響應(yīng)速度要較快,讓用戶充分享受到網(wǎng)絡(luò)即時(shí)消息的方便和快捷。本聊天工具由服務(wù)器端程序和客戶端程序兩部分組成,整體采用.NET平臺(tái)開發(fā),采用TCP/IP通信協(xié)議,使用XML對(duì)通信報(bào)文進(jìn)行封裝,以便于應(yīng)用程序API調(diào)用,組裝和解析XML報(bào)文。服務(wù)器是可以進(jìn)行監(jiān)聽,記錄客戶端請(qǐng)求和驗(yàn)證客戶端身份的合法性,并提供XML消息中轉(zhuǎn)服務(wù);客戶端程序面向?qū)嶋H用戶,它有必要的界面的按鈕,向用戶提供網(wǎng)絡(luò)即時(shí)消息的功能。
三、總體設(shè)計(jì)
(一)多線程設(shè)計(jì)
服務(wù)器需要和多個(gè)客戶端同時(shí)進(jìn)行通信,這就是服務(wù)器端的多線程。一旦服務(wù)器發(fā)現(xiàn)一個(gè)新的客戶端與之建立了連接,就馬上新建一個(gè)線程與客戶端進(jìn)行通信。用多線程的好處在于可以同時(shí)處理多個(gè)通信連接,不會(huì)出于由于數(shù)據(jù)排隊(duì)而發(fā)生的延遲或者丟失,可以很好利用系統(tǒng)的性能。
客戶端能夠完成信息的接收和發(fā)送操作,這與服務(wù)器的多線程概念不同,可以采用循環(huán)等待的方法來實(shí)現(xiàn)客戶端。利用循環(huán)等待的方式,客戶端首先接收用戶輸入的內(nèi)容并將它們發(fā)送到服務(wù)器端,然后接收來自服務(wù)器端的信息,將其返回給客戶端的用戶。
(二)數(shù)據(jù)庫(kù)的設(shè)計(jì)
本設(shè)計(jì)模擬的企業(yè)局域網(wǎng)架構(gòu),所以數(shù)據(jù)庫(kù)表主要用來存放部門信息和用戶的注冊(cè)信息,可利用兩張表來分別存放部門信息和用戶信息,用戶可通過服務(wù)器來查看在線用戶的個(gè)人信息。
(三)服務(wù)器的設(shè)計(jì)
主服務(wù)器實(shí)現(xiàn)了服務(wù)器的多線程,服務(wù)器端有一個(gè)進(jìn)程(或多個(gè)進(jìn)程)在指定的端口等待客戶的連接信息。一時(shí)連接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r(shí)候向服務(wù)端發(fā)出連接請(qǐng)求。
登陸認(rèn)證服務(wù)是對(duì)試圖登陸的客戶端進(jìn)行權(quán)限驗(yàn)證。驗(yàn)證過程為:服務(wù)器獲得客戶端發(fā)送來的用戶名和密碼,然后查詢數(shù)據(jù)庫(kù)的相應(yīng)的用戶列表,如果該用戶不存在或用戶名與密碼不匹配服務(wù)器將驗(yàn)證失敗的結(jié)果通過XMPP協(xié)議發(fā)還給客戶端,驗(yàn)證過程終止。如果驗(yàn)證通過,登陸驗(yàn)證服務(wù)會(huì)將表中的用戶狀態(tài)由離線變?yōu)樵诰€,然后將驗(yàn)證成功的結(jié)果發(fā)還給客戶端。
(四)客戶端的設(shè)計(jì)
用戶完成登錄后, 客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器請(qǐng)求讀取好友名單;服務(wù)器收到該請(qǐng)求,開始從數(shù)據(jù)庫(kù)讀取好友資料,向客戶端發(fā)送這些信息;客戶收到服務(wù)器消息后,在主窗口顯示好友。
客戶可以在客戶端查看好友信息,客戶端向服務(wù)器發(fā)送查詢好友信息的請(qǐng)求,然后服務(wù)器查詢數(shù)據(jù)庫(kù),接著將查詢得到的結(jié)果組合成XMPP協(xié)議的XML流返回給客戶端。
(五)文本通信功能設(shè)計(jì)
一對(duì)一:在本設(shè)計(jì)中文本通信功能采用由服務(wù)器中轉(zhuǎn),考慮到客戶在登陸系統(tǒng)時(shí)就跟服務(wù)器建立了TCP連接,而且在整個(gè)系統(tǒng)使用中客戶與服務(wù)器之間除了一些必要的控制信息及好友查詢等信息要進(jìn)行通信外,TCP連接是處于空閑狀態(tài)的,所以可以利用服務(wù)器中轉(zhuǎn)完成客戶間的文本通信。
一對(duì)多:此功能用于會(huì)議室聊天,具有一個(gè)會(huì)議室的建立,會(huì)議室屬性的設(shè)定等。一個(gè)用戶建立會(huì)議室后,服務(wù)器向所有在線用戶發(fā)送此會(huì)議室的信息,其他用戶就可以在主界面看到此會(huì)議室的消息, 只要知道此會(huì)議室的密碼,便能加入此會(huì)議室聊天。
(六)文件傳輸
本設(shè)計(jì)中,文件傳輸采用的是P2P通信。P2P通信的特點(diǎn)是通信的雙方通信前借助XMPP服務(wù)器建立TCP連接,之后雙方就進(jìn)行與服務(wù)器無關(guān)的點(diǎn)對(duì)點(diǎn)通信,直到通信結(jié)束。整個(gè)過程中,服務(wù)器只起了一個(gè)輔助與管理作用,真正的數(shù)據(jù)通信與服務(wù)器無關(guān)。
四、結(jié)論
本論文所設(shè)計(jì)的即時(shí)通訊客戶系統(tǒng),主要功能是能夠完成服務(wù)器與客戶端之間的連接,并完成客戶端用戶之間的即時(shí)通訊,軟件主要包括以下幾個(gè)功能:用戶登錄和注冊(cè)管理;好友信息查詢;即時(shí)文本消息的互相傳送(一對(duì)一文本傳輸和一對(duì)多文本傳輸);文件的點(diǎn)對(duì)點(diǎn)傳輸?shù)取?/p>
在完成這些功能的同時(shí),本文主要解決了一下幾個(gè)方面的關(guān)鍵問題:系統(tǒng)采用了傳統(tǒng)的客戶端、服務(wù)器網(wǎng)絡(luò)組織模式,并且設(shè)計(jì)了基于中心服務(wù)器模式的P2P客戶端,在客戶端與服務(wù)器建立連接完成以后,通訊在用戶與好友間直接點(diǎn)到點(diǎn)的連接與通信,從而大大減輕了服務(wù)器端得負(fù)荷,也保證了可靠的文件傳輸機(jī)制,客戶端的設(shè)計(jì)中還采用服務(wù)器連接中轉(zhuǎn)的方案進(jìn)行文本消息的傳送。
參考文獻(xiàn):
[1] 張青,郭亞萍.C#編程思想與實(shí)踐[M].北京:冶金工業(yè)出版社,2005
[2] 陳明.實(shí)用軟件工程基礎(chǔ)[M].北京:清華大學(xué)出版社,2002
[3] 黃德志,湯慶恩.C#程序設(shè)計(jì)實(shí)用教程[M].北京:冶金工業(yè)出版社,2002
[4] 王敏.C#線程參考手冊(cè)[M].北京:清華大學(xué)出版社,2003
作者簡(jiǎn)介:王小瓊(1981-),女,碩士研究生,研究方向:軟件工程。
陳得友(1979-),男(漢族),河南信陽人,大學(xué)本科,副教授,主要研究領(lǐng)域?yàn)檐浖夹g(shù)、高等教育。