【摘要】即時(shí)通訊系統(tǒng)(IM)作為一種通訊手段,提供方便快捷的交流方式,通過(guò)網(wǎng)絡(luò)進(jìn)行在線(xiàn)文字交談,文件傳輸、語(yǔ)音對(duì)話(huà)及進(jìn)行視頻會(huì)議等。本文主要研究的是基于TCP協(xié)議,利用Socket網(wǎng)絡(luò)編程技術(shù),采用C#面向?qū)ο缶幊汤砟顚?shí)現(xiàn)的即時(shí)通訊系統(tǒng)。系統(tǒng)結(jié)合C/S模式與P2P模式的優(yōu)點(diǎn),采用二者混合的模式作為總體的設(shè)計(jì)模式,服務(wù)器端主要處理與數(shù)據(jù)庫(kù)相關(guān)的客戶(hù)請(qǐng)求,客戶(hù)端與其他客戶(hù)端進(jìn)行連接通訊,無(wú)需服務(wù)器中轉(zhuǎn),減輕服務(wù)器端負(fù)擔(dān),提高信息傳遞的實(shí)時(shí)性和高效性。系統(tǒng)實(shí)現(xiàn)申請(qǐng)帳戶(hù)、驗(yàn)證登陸、即時(shí)聊天、用戶(hù)管理,好友添加、文件傳輸、聊天記錄查詢(xún)等功能,并使用Visual C#強(qiáng)大的界面處理能力,提供友好的服務(wù)器和客戶(hù)端操作界面。
【關(guān)鍵詞】即時(shí)通訊TCP SocketC/SP2P
一、背景與研究目的
隨著全球信息化進(jìn)程與網(wǎng)絡(luò)飛速發(fā)展,龐大的用戶(hù)群影響網(wǎng)絡(luò)性能、信息阻塞,而MSN、QQ等即時(shí)通訊軟件嚴(yán)重依賴(lài)良好的Internet網(wǎng)絡(luò)接入條件。而且一些單位企業(yè),特別是政府機(jī)構(gòu)的內(nèi)部網(wǎng)絡(luò)和Internet的接入受到嚴(yán)格的限制條件約束,通訊端口關(guān)閉或使用網(wǎng)匣來(lái)實(shí)現(xiàn)內(nèi)外網(wǎng)的特定服務(wù)之間的數(shù)據(jù)交換。為解決這些矛盾,更高效的完成局域網(wǎng)內(nèi)協(xié)同合作,局域網(wǎng)即時(shí)通訊系統(tǒng)的研究顯得非常重要。
二、系統(tǒng)需求分析
1、系統(tǒng)實(shí)現(xiàn)目標(biāo)
局域網(wǎng)內(nèi)即時(shí)通訊系統(tǒng)要完成局域網(wǎng)內(nèi)用戶(hù)的協(xié)同工作,保證交流的實(shí)時(shí)性和信息傳遞的準(zhǔn)確高效性,方便用戶(hù)溝通。(1)實(shí)現(xiàn)即時(shí)通訊的基本功能:即時(shí)消息傳送、文件傳輸、好友管理、個(gè)人資料管理、語(yǔ)音視頻聊天等。為用戶(hù)提供最基本的通訊功能,并提供一個(gè)友好的操作界面。(2)保證信息傳遞的高效性。適應(yīng)局域網(wǎng)通訊的特點(diǎn),保證信息在局域網(wǎng)內(nèi)傳遞的高效、穩(wěn)定、正確。(3)考慮C/S模式下服務(wù)器負(fù)荷問(wèn)題。減輕服務(wù)器負(fù)擔(dān),保證服務(wù)器穩(wěn)定工作。(4)系統(tǒng)具有擴(kuò)展性。用戶(hù)的需求隨著應(yīng)用的深入而不斷變化,具有良好的可擴(kuò)展性,便于二次開(kāi)發(fā)。
2、系統(tǒng)組成
系統(tǒng)以Visual Studio為開(kāi)發(fā)環(huán)境,C#為編程語(yǔ)言,SQL Server為數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),采用C/S模式和P2P模式相混合的模式,由IM客戶(hù)端、IM服務(wù)器端兩部分組成。服務(wù)器端通過(guò)操作數(shù)據(jù)庫(kù)處理客戶(hù)端的各種不同請(qǐng)求,客戶(hù)端根據(jù)本地資源或服務(wù)器返回的信息完成用戶(hù)操作。在設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)各功能模塊時(shí),利用Socket網(wǎng)絡(luò)編程技術(shù),使用Socket套接字助手完成客戶(hù)機(jī)與服務(wù)器、客戶(hù)機(jī)與客戶(hù)機(jī)之間的通信,通信時(shí)采用TCP協(xié)議,保證數(shù)據(jù)可靠穩(wěn)定傳輸。
3、系統(tǒng)的基本功能
(1)服務(wù)器端功能。客戶(hù)端可以向服務(wù)器發(fā)出13種不同的請(qǐng)求:請(qǐng)求注冊(cè)、請(qǐng)求登陸驗(yàn)證、請(qǐng)求在線(xiàn)好友列表、請(qǐng)求添加好友、通知服務(wù)器添加好友成功、請(qǐng)求刪除好友、根據(jù)ID或昵稱(chēng)請(qǐng)求某用戶(hù)信息、請(qǐng)求修改個(gè)人資料、請(qǐng)求所有在線(xiàn)用戶(hù)列表、請(qǐng)求更改個(gè)人狀態(tài)、請(qǐng)求所有好友列表、通知服務(wù)器自己的IP和端口、通知服務(wù)器自己退出。服務(wù)器根據(jù)請(qǐng)求命令的不同,給予不同的處理,這些處理通過(guò)操作數(shù)據(jù)庫(kù),更新、提取相關(guān)信息來(lái)實(shí)現(xiàn)。
(2)客戶(hù)端功能。客戶(hù)端提供友好的用戶(hù)使用界面,用戶(hù)通過(guò)服務(wù)器的登陸驗(yàn)證后進(jìn)入即時(shí)通訊主界面,通過(guò)具體操作,實(shí)現(xiàn)與好友即時(shí)聊天,根據(jù)ID或昵稱(chēng)查找其他用戶(hù),查找所有在先線(xiàn)用戶(hù),添加好友,刪除好友,查看聊天記錄、給好友傳送文件、修改個(gè)人信息等。另外,在用戶(hù)進(jìn)入主界面的同時(shí),啟動(dòng)偵聽(tīng)線(xiàn)程,用于偵聽(tīng)連入本機(jī)的連接請(qǐng)求。請(qǐng)求包括好友上下線(xiàn)通知、即時(shí)聊天請(qǐng)求、加為好友請(qǐng)求、文件傳輸請(qǐng)求、同意加為好友請(qǐng)求,用戶(hù)修改個(gè)人信息請(qǐng)求。
三、系統(tǒng)框架設(shè)計(jì)
1、服務(wù)器端設(shè)計(jì)。啟動(dòng)服務(wù)器,使服務(wù)器的偵聽(tīng)端口處于偵聽(tīng)狀態(tài)。當(dāng)偵聽(tīng)到用戶(hù)接入時(shí),接受連接,生成處理該連接的Socket,接受連接傳入的請(qǐng)求,創(chuàng)建新線(xiàn)程,接收并解析用戶(hù)傳來(lái)的數(shù)據(jù),獲取請(qǐng)求命令并做出相應(yīng)的處理,通過(guò)socket將處理結(jié)果返回給客戶(hù)端。服務(wù)器偵聽(tīng)連接,接收來(lái)自客戶(hù)端的請(qǐng)求命令,根據(jù)命令請(qǐng)求的不同給予相應(yīng)的處理。
2、客戶(hù)端設(shè)計(jì)??蛻?hù)端的設(shè)計(jì)分為:注冊(cè)模塊、登陸模塊、即時(shí)聊天模塊、文件傳輸模塊、用戶(hù)管理模塊、添加好友模塊、偵聽(tīng)模塊、定時(shí)刷新模塊等。
注冊(cè)模塊:負(fù)責(zé)新用戶(hù)的注冊(cè)處理。進(jìn)入注冊(cè)模塊后,輸入個(gè)人信息,提交給服務(wù)器。服務(wù)器接收請(qǐng)求處理后,返回一個(gè)用戶(hù)ID,用戶(hù)可以憑借該ID進(jìn)入即時(shí)通訊主界面。
登陸模塊:對(duì)試圖進(jìn)入系統(tǒng)的用戶(hù)進(jìn)行權(quán)限驗(yàn)證。輸入用戶(hù)ID,密碼及服務(wù)器IP,根據(jù)輸入的信息,連接服務(wù)器請(qǐng)求登陸,服務(wù)器根據(jù)提交的數(shù)據(jù)進(jìn)行處理并將結(jié)果返回給客戶(hù)端。若通過(guò)了驗(yàn)證,客戶(hù)端將服務(wù)器IP,個(gè)人IP及端口以及相關(guān)信息存入以u(píng)id命名的文件夾中??蛻?hù)端把自己的IP和端口發(fā)送給服務(wù)器并請(qǐng)求在線(xiàn)好友列表,若文件夾uid中沒(méi)有好友列表信息,則向服務(wù)器請(qǐng)求好友列表信息并將返回的信息全部放入uid文件夾的相關(guān)文件中。當(dāng)向在線(xiàn)好友發(fā)送上線(xiàn)的消息后,系統(tǒng)進(jìn)入主界面。若未通過(guò)驗(yàn)證,客戶(hù)端會(huì)提示用戶(hù)錯(cuò)誤信息,如用戶(hù)名不存在、密碼錯(cuò)誤、無(wú)法連接服務(wù)器等。
偵聽(tīng)模塊:該模塊相當(dāng)于后臺(tái)處理。在即時(shí)通訊主界面載入同時(shí),客戶(hù)端會(huì)創(chuàng)建并啟動(dòng)偵聽(tīng)線(xiàn)程。
添加好友模塊:可添加好友到自己的好友列表。選擇主界面的“查詢(xún)”,在彈出的窗口中可選擇“精確查找”或者“看誰(shuí)在線(xiàn)上”兩種查找方式。選擇精確查找,輸入所要查找的用戶(hù)ID或者昵稱(chēng),向服務(wù)器提交相關(guān)信息后,客戶(hù)端會(huì)顯示查找的結(jié)果;選擇“看誰(shuí)在線(xiàn)上”,服務(wù)器會(huì)返回所有在線(xiàn)用戶(hù)的列表(不包含自己)。在查詢(xún)返回的結(jié)果列表里,可添加選中的某用戶(hù)為好友,客戶(hù)端將根據(jù)服務(wù)器返回的該用戶(hù)的IP和端口信息直接向該選中用戶(hù)發(fā)出添加好友的請(qǐng)求。
用戶(hù)管理模塊:可修改個(gè)人信息、刪除好友、查看聊天記錄等,個(gè)人信息修改后將本地客戶(hù)端和遠(yuǎn)程服務(wù)器端的相關(guān)信息都修改。用戶(hù)想與某好友解除好友關(guān)系,可以選擇該好友節(jié)點(diǎn)進(jìn)行刪除。
即時(shí)聊天模塊:建立好友聊天,可雙擊好友節(jié)點(diǎn),打開(kāi)或激活聊天窗口。在聊天窗體載入前,客戶(hù)端會(huì)在存儲(chǔ)好友信息的文件中讀取該好友的信息,并在在線(xiàn)好友列表文件中檢查該好友是否在線(xiàn),若好友在線(xiàn),記錄該好友的IP和端口。當(dāng)用戶(hù)在信息窗口輸入消息,點(diǎn)擊發(fā)送時(shí),客戶(hù)端將消息發(fā)送給好友,好友接收到消息后,會(huì)將收到的信息顯示在聊天窗口中。若好友不在線(xiàn),提示好友不在線(xiàn),此時(shí)所發(fā)信息都將直接傳給服務(wù)器暫存,等好友上線(xiàn),轉(zhuǎn)發(fā)給相應(yīng)好友。
文件傳輸模塊:包括文件發(fā)送和文件接收。聊天時(shí),選擇“文件傳輸”,在文件選擇窗口選擇要發(fā)送的文件,將文件打包成字節(jié)流后發(fā)送給對(duì)方。接收方收到文件傳輸請(qǐng)求后,建立連接,接收該連接傳送來(lái)的數(shù)據(jù),然后解析數(shù)據(jù)內(nèi)容,將其存盤(pán)。
定時(shí)刷新模塊:客戶(hù)端可能因?yàn)槟承┰颍ㄈ鐢嚯?,系統(tǒng)重啟)引起不正常關(guān)閉,而本地?cái)?shù)據(jù)文件并沒(méi)有及時(shí)地保存相關(guān)數(shù)據(jù),此時(shí)需客戶(hù)端定時(shí)向服務(wù)器端請(qǐng)求部分?jǐn)?shù)據(jù)以更新本地文件及相關(guān)界面顯示。
四、結(jié)束語(yǔ)
即時(shí)通訊系提供了一種方便快捷的交流方式,成為語(yǔ)音及文本的在線(xiàn)實(shí)時(shí)通信的主要技術(shù),是移動(dòng)商務(wù)、在線(xiàn)協(xié)作及Internet應(yīng)用的核心,同時(shí)也繼承IP技術(shù)的開(kāi)放風(fēng)格,扮演比電子郵件更為重要的角色,即時(shí)通訊系統(tǒng)的研究與開(kāi)發(fā)也將會(huì)吸引越來(lái)越多的軟件開(kāi)發(fā)者參與研究。