計算機網(wǎng)絡(luò)課程設(shè)計基于WinSock的即時通信軟件功能原理模擬_第1頁
計算機網(wǎng)絡(luò)課程設(shè)計基于WinSock的即時通信軟件功能原理模擬_第2頁
計算機網(wǎng)絡(luò)課程設(shè)計基于WinSock的即時通信軟件功能原理模擬_第3頁
計算機網(wǎng)絡(luò)課程設(shè)計基于WinSock的即時通信軟件功能原理模擬_第4頁
計算機網(wǎng)絡(luò)課程設(shè)計基于WinSock的即時通信軟件功能原理模擬_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、計算機網(wǎng)絡(luò)課程設(shè)計題目:基于winsock的即時通信軟件功能原理模擬專業(yè)班級:_ 學 號:_姓 名:_成 績:_目錄1 摘要32相關(guān)技術(shù)32.1主流即時通信模型32.2主流即時通信協(xié)議62.3 w i nsock技術(shù)82.4 c#中的網(wǎng)絡(luò)編程93 系統(tǒng)總體設(shè)計103.1 功能需求103.2系統(tǒng)總體模塊設(shè)計113.3系統(tǒng)中主要用到的類124 系統(tǒng)分塊設(shè)計134.1服務(wù)器端設(shè)計134.2 客戶端設(shè)計174.3通訊協(xié)議模塊215系統(tǒng)具體實現(xiàn)225.1關(guān)鍵模塊的具體實現(xiàn)225.2客戶端運行效果286 課程小結(jié)337 參考資料341 摘要隨著網(wǎng)絡(luò)通信技術(shù)和計算機技術(shù)的進一步發(fā)展,即時通信(instant

2、 messaging)正在成為網(wǎng)絡(luò)在線活動中不可缺少的業(yè)務(wù),對它的研究是互聯(lián)網(wǎng)應(yīng)用中一個熱點課題。本課題在現(xiàn)有的網(wǎng)絡(luò)通信技術(shù)的基礎(chǔ)上設(shè)計并實現(xiàn)了一個簡單的即時通信系統(tǒng)的模擬。該系統(tǒng)工作機制模仿即時通信軟件的基本功能,登陸,上線,傳遞信息等等。首先,分析了當今流行的各種即時通信軟件,確定了基本即時通信系統(tǒng)的功能,抽象出了整體的軟件模型。對即時通信系統(tǒng)中采用的關(guān)鍵技術(shù)進行了簡化,設(shè)計了一個整合p2p(peertopeer,對等連接或?qū)Φ染W(wǎng)絡(luò))和cs(clientserver,客戶服務(wù)器)模式、支持多協(xié)議轉(zhuǎn)換通信協(xié)議和實名制身份認證的即時通信系統(tǒng)。然后,論文對即時通信系統(tǒng)的服務(wù)器端和客戶端的主要組成

3、模塊進行了詳細的剖析,論述了各個模塊詳細的設(shè)計和實現(xiàn)方式,分別闡述了每個模塊的主要功能,并給出了模塊流程圖。最后,論文對所設(shè)計的即時通信系統(tǒng)服務(wù)器端進行了運行,并截取了軟件運行圖片。結(jié)果表明系統(tǒng)實現(xiàn)了設(shè)計的要求,具有登陸、上線、信息傳遞的功能。2相關(guān)技術(shù)2.1主流即時通信模型目前主流的即時通信模型主要有cs模型與p2p模型,這兩種模型各有千秋,所以許多的軟件機構(gòu)和計算公司把p2p和cs一樣的看重,經(jīng)常把兩者結(jié)合在一起使用。cs模型cs(clientserver,客戶服務(wù)器)模型,簡稱cs架構(gòu),其模型如圖所示。該模型可以合理利用兩端硬件環(huán)境優(yōu)勢,將任務(wù)合理分配到客戶端6rill務(wù)器,降低系統(tǒng)通信

4、開銷。在這種結(jié)構(gòu)中,服務(wù)器處于一個中心地位。服務(wù)器是一個擁有強大處理能力和很大帶寬的高性能計算機,數(shù)據(jù)和信息都保存在服務(wù)器上。服務(wù)器始終處于工作狀態(tài),一般同時為多個客戶提供服務(wù),它被動地接受客戶連接,根據(jù)客戶的請求提供相應(yīng)的服務(wù)。這就造成了服務(wù)器設(shè)計的復雜性。特別是像即時通信服務(wù)器這類具有社區(qū)性的服務(wù)器,它只有為群體提供服務(wù)才有意義。即時通信服務(wù)器是數(shù)據(jù)中心,它是客戶活動的中介,需要同時應(yīng)對眾多客戶的請求。cs通信主要特點是客戶端之間的通信都要通過服務(wù)器的轉(zhuǎn)發(fā),會造成服務(wù)太集中,在cs模型中,當網(wǎng)絡(luò)增大時(即越來越多的客戶加入),服務(wù)器的壓力就越大。當增加一個客戶,服務(wù)器的性能就會弱化,甚至會

5、而使服務(wù)器失效而導致整個網(wǎng)絡(luò)的癱瘓等,其優(yōu)點是便于集中管理,象這種結(jié)構(gòu)一般用在用戶數(shù)量少的局域網(wǎng)內(nèi)。p2p模型p2p(peerto peer,對等連接或?qū)Φ染W(wǎng)絡(luò))模型,是指網(wǎng)絡(luò)中的物理節(jié)點在邏輯上以相同的地位進行通信的模型,而不是處理能力的對等。相對于傳統(tǒng)的cs模型,其弱化了服務(wù)器的概念,系統(tǒng)中的各個節(jié)點不再區(qū)分服務(wù)器和客戶端的角色關(guān)系,每個節(jié)點既可請求服務(wù),也可提供服務(wù),節(jié)點之間可以直接交換資源和服務(wù)而不必通過服務(wù)器。p2p的最大特點就是用戶之間直接共享資源,使得pc不再是被動的客戶端,而成為具有服務(wù)器和客戶端雙重特征的設(shè)備,p2p模型如圖所示。基于p2p的模型與客戶服務(wù)器模型相比,它最大的

6、實力是降低了對服務(wù)器的依賴及其分散控制(相對于服務(wù)器的集中控制),用戶不需要服務(wù)器就能直接通信,模型中的節(jié)點是動態(tài)的,可以隨時加入或退出,而且隨著用戶的加入,不僅服務(wù)的需求增加了,整體資源和服務(wù)能力也在同步地擴充。信息在對等節(jié)點間直接交換,高速及時,降低中轉(zhuǎn)成本。采用p2p模型可以有效地利用網(wǎng)絡(luò)中散布的大量普通點,將任務(wù)或存儲資料分布到所有結(jié)點上。利用其中閑置的計算能力或存儲空間,達到高性能計算和海量存儲的目的。同時因為資源分布在多個節(jié)點,部分結(jié)點或網(wǎng)絡(luò)遭到破壞對其它部分的影響很小,也更好地實現(xiàn)了整個網(wǎng)絡(luò)的負載均衡。p2p已經(jīng)在共享資源和服務(wù)器的價值方面動搖了網(wǎng)絡(luò)的邊界。當然p2p也有許多不足

7、之處。首先p2p缺乏管理機制,管理者再也無法對其用戶進行必要的管理,不象在cs模式中只需要在中心點進行管理, 所以p2p模型的網(wǎng)絡(luò)資源往往并不可靠。其次p2p網(wǎng)絡(luò)中數(shù)據(jù)的安全性難以保證。另外還存在大多數(shù)用戶之間傳送大量大體積文件而存在吞噬網(wǎng)絡(luò)帶寬問題、版權(quán)問題。還有就是目前還沒有制定出一致的p2p標準,這對p2p技術(shù)進一步發(fā)展也是一個障礙。我們常用的qq、msnmessenger,icq等即時通信軟件都是p2p應(yīng)用的實例,它們允許用戶互相交換信息、交換文件。2.2主流即時通信協(xié)議傳輸控制協(xié)議tcp(transmission control protocal)和用戶數(shù)據(jù)報協(xié)議udp(user d

8、atagram protoc01)是tcpip協(xié)議族的兩個主要的傳輸協(xié)議,這兩個協(xié)議都使用ip作為網(wǎng)絡(luò)層協(xié)議。在網(wǎng)絡(luò)通信傳輸機制中,tcp是屬于“面向連接,可靠傳輸”的類型,面向連接的傳輸意味著在進行通信以前,需要在兩個系統(tǒng)之問建立邏輯連接,在每個數(shù)據(jù)傳輸?shù)倪^程中都需要進行應(yīng)答以保證數(shù)據(jù)包的完整。這種方法需要的網(wǎng)絡(luò)丌銷較大,但卻提供一種可靠的傳輸層服務(wù)。udp是屬于“面向無連接,不可靠傳輸”的類型,該協(xié)議只負責接收和傳送上層協(xié)議傳遞的消息,udp本身不做任何檢測、修改與應(yīng)答,上層協(xié)議需要自己處理這些事務(wù)。他們實際上最大的區(qū)別在于為應(yīng)用協(xié)議提供不同的服務(wù)。tcp協(xié)議tcp是一個面向連接的、可靠的

9、傳輸層協(xié)議,協(xié)議提供的服務(wù)包括面向連接、雙向、有序且無重復的數(shù)據(jù)流傳送,有效的流量控制、全雙工操作和多路復用。它主要的功能是提供大量數(shù)據(jù)的傳輸并確保其傳輸無誤,并提供錯誤檢查、數(shù)據(jù)復原以及數(shù)據(jù)超時重傳等機制,適用于傳輸可靠性要求比較高的數(shù)據(jù)傳輸。tcp連接的建立采用了三次握手機制,這一機制保證校驗了數(shù)據(jù),保證了他的可靠性。同時,tcp協(xié)議采用面向字節(jié)的方式,將報文段的數(shù)據(jù)部份進行編號,每一個字節(jié)對應(yīng)一個序號,雖然耗時、占資源,但是可以確保消息傳輸?shù)目煽颗c準確的傳遞。另外,在傳輸數(shù)據(jù)包期間,tcp會根據(jù)鏈路中數(shù)據(jù)流量的大小來調(diào)節(jié)傳送的速率,傳輸時如果發(fā)現(xiàn)有丟包,會有嚴格的重傳機制,從而以保證數(shù)據(jù)

10、包可靠的傳輸。使用數(shù)據(jù)流傳送,在一個tcp連接中,源節(jié)點發(fā)送一連串字節(jié)給節(jié)目的節(jié)點即提供字節(jié)流服務(wù),并以序列號標識的這些非結(jié)構(gòu)化字節(jié)流。這種服務(wù)給應(yīng)用帶來了便利,因為它們不必在將數(shù)據(jù)傳給tcp之前對數(shù)據(jù)進行分塊。tcp將它們分組后交給m發(fā)送。通過面向連接、端到端和可靠的數(shù)據(jù)包發(fā)送,tcp提供互聯(lián)網(wǎng)絡(luò)數(shù)據(jù)報傳輸?shù)目煽啃?。tcp通過使用轉(zhuǎn)發(fā)確認號保證數(shù)據(jù)按順序接收,由可靠性機制處理丟失、延遲、重復或讀錯的數(shù)據(jù)包,由超時機制檢測丟失的數(shù)據(jù)包并請求重新傳輸。tcp提供有效的流量控制,這表示當向源節(jié)點發(fā)送確認時,接收tcp進程會指示它可以接收而不會引起內(nèi)部緩沖區(qū)溢出的級高序列號;全雙工的操作表示tcp進

11、程可以同時進行發(fā)送和接收。而多路復表示大量高層對話可以同時通過一個單獨的連接發(fā)送出去。即時通信系統(tǒng)的消息傳輸一般是建立在tcp協(xié)議基礎(chǔ)之上的,客戶與服務(wù)器之間都是通過tcp傳輸數(shù)據(jù)。服務(wù)器端口一般固定。去掉截獲的tcp包頭信息,對數(shù)據(jù)部分進行分析可以找出協(xié)議的發(fā)送和接收數(shù)據(jù)的基本格式,但是tcp面向連接的,在國內(nèi)目前ip地址短缺,很多采用通過局域網(wǎng)連入intemet的網(wǎng)絡(luò)狀況下,tcp的對等連接顯然不能滿足所有的要求,而且目前由于黑客軟件和病毒的泛濫,大部分上網(wǎng)的個人計算機都配置了防火墻在很大程度上阻止了許多的入站請求。所以數(shù)據(jù)傳輸大都是先嘗試直接連接,如果連接不通的話采用通過服務(wù)器中轉(zhuǎn)的方式

12、。目前基于tcp的各種應(yīng)用有telnet、h1vrp、ftp和smtp等,這些應(yīng)用通常都是用戶進程。udp協(xié)議用戶數(shù)據(jù)報協(xié)議udp是建立在網(wǎng)際協(xié)議之上的,提供面向無連接、不可靠(不保證數(shù)據(jù)的正確傳送和重復出現(xiàn))的數(shù)據(jù)報傳輸服務(wù)的傳輸層協(xié)議。udp傳輸不像tcp傳輸一樣需要預先建立一條連接;udp把數(shù)據(jù)發(fā)送出去但不進行差錯控制和流量控制,報文可能丟失、重復或者失序,而發(fā)送方是得不到通知的,數(shù)據(jù)也不會被重傳。因此,udp提供的是一種不可靠的應(yīng)用數(shù)據(jù)傳輸服務(wù)。它不需要通過一些握手協(xié)議確保連接的可靠性,發(fā)送方直接把數(shù)據(jù)廣播到網(wǎng)絡(luò)上,任何欲接受者都可接收到數(shù)據(jù)。在udp的廣播消息中,數(shù)據(jù)的目標不是指定地

13、址唯一的一臺機器,而是特殊的廣播地址,數(shù)據(jù)可發(fā)送到同一子網(wǎng)絡(luò)上的所有機器上。udp使用底層網(wǎng)絡(luò)的廣播和組播設(shè)施交互報文時,必須制定報文邊界。其優(yōu)點在于:1、使用udp時,每個數(shù)據(jù)中都給出了完整的地址信息,發(fā)送數(shù)據(jù)之前不需要建立發(fā)送方與接收方的連接,因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延;2、不使用擁塞控制,也不保證可靠傳輸,因此主機不需要維持具有許多參數(shù)的、復雜的連接狀態(tài)表;3、用戶數(shù)據(jù)報只有8個字節(jié)的首部開銷,比tcp的20個字節(jié)的首部要短,因此它的網(wǎng)絡(luò)開銷一般要小于tcp;4、udp不進行流量控制,沒有序列與確認、沒有超時重發(fā)等機制,因此它處理和傳輸數(shù)據(jù)的速度快;作為一種面向無連接的傳輸協(xié)議,

14、基于udp的應(yīng)用程序在高可靠性、低延遲的網(wǎng)絡(luò)中運行得很好,但是在通信子網(wǎng)的服務(wù)質(zhì)量相對低下的intemet上,它可能就無法正常運行了,因為數(shù)據(jù)報的丟失過于頻繁。原因就在于udp的不可靠性,而這些應(yīng)用程序自身可能又沒有提供可靠性保障。因此,基于udp的應(yīng)用程序如果想在可靠性低下的網(wǎng)絡(luò)中運行的話,必須自己提供可靠性保障,例如丟失數(shù)據(jù)報的重傳、失序數(shù)據(jù)報的組合等。udp與tcp之間的差別主要在于可靠性方面。但也不是說,因為udp是一種不可靠的傳輸協(xié)議而毫無用處。在一個良好的網(wǎng)絡(luò)環(huán)境下,使用udp傳輸數(shù)據(jù)還是相當可靠的,而且效率也比較高。udp比tcp更適合于與時問有關(guān)的應(yīng)用數(shù)據(jù)的傳輸。在許多應(yīng)用中并

15、不需要保證嚴格的傳輸可靠性,比如視頻會議系統(tǒng),并不要求音頻視頻數(shù)據(jù)絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用udp會更合理一些。目前基于udp工作的即時通信軟件主要有oicq。由于udp的特點,亦是進行網(wǎng)絡(luò)廣播的首選協(xié)議。傳統(tǒng)的nfs(netfile system,網(wǎng)絡(luò)文件系統(tǒng))使用udp。2.3 w i nsock技術(shù)隨著intemet的迅猛發(fā)展,網(wǎng)絡(luò)通信應(yīng)用程序的開發(fā)成為一個研究熱點。windows環(huán)境下進行通信程序設(shè)計的最基本方法是采用winsock技術(shù)實現(xiàn)。winsock規(guī)范以ucberkeley大學bsd unix中流行的sockets接口為范例定義了一套micosoft

16、 windows下網(wǎng)絡(luò)編程接口1。應(yīng)用程序調(diào)用winsock的api實現(xiàn)相互之間的通信。又利用下層的網(wǎng)絡(luò)通信協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通信工作。winsock工作原理如圖所示。sockets也稱為套接字,是一種網(wǎng)絡(luò)編程接口,它是通信端點的一種抽象,提供了一種發(fā)送和接收數(shù)據(jù)的機制。用戶目前可以使用兩種類型的套接字,它們是數(shù)據(jù)報套接字(datagram sockets)和流式套接字(stream sockets),這兩種套接字傳輸?shù)臄?shù)據(jù)類型是不同的,因而其使用方法和相應(yīng)的程序設(shè)計模型也是不同的。2.4 c#中的網(wǎng)絡(luò)編程服務(wù)器端:第一步:用指定的端口號和服務(wù)器的ip建立一個endpoint對像

17、;第二步:建立一個socket對像;第三步:用socket對像的bind()方法綁定endpoint;第四步:用socket對像的listen()方法開始監(jiān)聽;第五步:接受到客戶端的連接,用socket對像的accept()方法創(chuàng)建新的socket對像用于和請求的客戶端進行通信;第六步:通信結(jié)束后一定記得關(guān)閉socket;客戶端:第一步:用指定的端口號和服務(wù)器的ip建立一個endpoint對像;第二步:建立一個socket對像;第三步:用socket對像的connect()方法以上面建立的endpoint對像做為參數(shù),向服務(wù)器發(fā)出連接請求;第四步:如果連接成功,就用socket對像的send(

18、)方法向服務(wù)器發(fā)送信息;第五步:用socket對像的receive()方法接受服務(wù)器發(fā)來的信息 ;第六步:通信結(jié)束后一定記得關(guān)閉socket;3 系統(tǒng)總體設(shè)計3.1 功能需求1、包括服務(wù)器端和客戶端兩部分,通過tcp/網(wǎng)絡(luò)連接,可以獨立運行。多個客戶端之間通過服務(wù)器端實現(xiàn)相互通信。2、服務(wù)器端為客戶端分配唯一標識號,并且負責維護客戶端列表。負責轉(zhuǎn)發(fā)客戶端消息及廣播客戶端上線及下線消息。3、客戶端由客戶使用,可以指定服務(wù)器連接端口,可以獲取現(xiàn)有客戶端列表、發(fā)送消息到指定客戶端、廣播發(fā)送消息等。同時還可以接收來自其他客戶端的消息。4、發(fā)送的消息只支持文本消息,暫不支持圖片及其他格式的信息。5、沒有

19、進行數(shù)據(jù)庫方面的支持,即不可以記錄通信記錄及用戶信息等。根據(jù)上面的要求,可以將聊天軟件分為服務(wù)器端和客戶端兩個部分開發(fā)。但是兩個部分并非完全獨立,首先,它們之間需要定義彼此的通訊協(xié)議,其次,還可以共享通訊協(xié)議模塊。軟件模塊結(jié)構(gòu)如圖:協(xié)議處理模塊服務(wù)器服務(wù)器界面 服務(wù)器對外接口客戶端客戶端界面客戶端對外接口模塊說明協(xié)議處理模塊:負責服務(wù)器端和客戶端通訊數(shù)據(jù)的打包解包操作。服務(wù)器模塊:負責服務(wù)器端所有功能的實現(xiàn),服務(wù)器通過調(diào)用協(xié)議處理模塊完成通訊數(shù)據(jù)的打包和解包。邏輯上分成界面和對外接口兩個部分,實現(xiàn)時可以集成到一起??蛻舳四K:負責客戶端所有功能的實現(xiàn),客戶端也是通過調(diào)用協(xié)議處理模塊完成通訊數(shù)據(jù)

20、的打包和解包。邏輯上分成界面和對外接口兩個部分,實現(xiàn)時可以集成到一起。3.2系統(tǒng)總體模塊設(shè)計所設(shè)計的系統(tǒng)模塊結(jié)構(gòu)圖如下:即時通信系統(tǒng)服務(wù)器端客戶端啟動服務(wù)器斷開服務(wù)器監(jiān)聽客戶端連接管理客戶端消息處理連接服務(wù)器斷開服務(wù)器消息發(fā)送選擇好友3.3系統(tǒng)中主要用到的類類主要作用主要方法類tcplistener 類提供一些簡單方法,用于在阻止同步模式下偵聽和接受傳入連接請求??墒褂?tcpclient 或 socket 來連接 tcplistener。tcplistener.start()/開始監(jiān)聽tcplistener.acceptsocket()接收socket類型的遠端連接tcplistener.s

21、top()關(guān)閉監(jiān)聽操作類tcpclient 類提供了一些簡單的方法,用于在同步阻止模式下通過網(wǎng)絡(luò)來連接、發(fā)送和接收流數(shù)據(jù)。為使 tcpclient 連接并交換數(shù)據(jù),使用 tcp protocoltype 創(chuàng)建的 tcplistener 或 socket 必須偵聽是否有傳入的連接請求。tcpclient.connect (ipendpoint) 使用指定的遠程網(wǎng)絡(luò)終結(jié)點將客戶端連接到遠程 tcp 主機。 tcpclient.connect (ipaddress, int32) 使用指定的 ip 地址和端口號將客戶端連接到 tcp 主機。 tcpclient.connect (ipaddress,

22、 int32) 使用指定的 ip 地址和端口號將客戶端連接到遠程 tcp 主機。 類networkstream 類提供在阻止模式下通過 stream 套接字發(fā)送和接收數(shù)據(jù)的方法??梢栽谕胶彤惒綌?shù)據(jù)傳輸時使用 networkstream 類。networkstream.read()/從 networkstream 讀取數(shù)據(jù)。networkstream.write()/將數(shù)據(jù)寫入 networkstream。4 系統(tǒng)分塊設(shè)計4.1服務(wù)器端設(shè)計服務(wù)器端系統(tǒng)設(shè)計應(yīng)用程序中,通常是一個服務(wù)器端接受多個客戶端的鏈接,同時與連接成功的客戶端進行數(shù)據(jù)傳輸。服務(wù)器端常具有以下幾個功能:監(jiān)聽連接及提供端口。為客

23、戶端提供連接端口,并監(jiān)聽客戶端的連接請求,為客戶端分配通訊端口。管理和維護客戶端的鏈接。實時更新客戶端的鏈接狀態(tài)。當客戶端斷開連接的時候,相應(yīng)的斷開其通信。接受數(shù)據(jù)管理。接受所有客戶端的數(shù)據(jù),根據(jù)應(yīng)用程序的通訊協(xié)議對接受數(shù)據(jù)進行處理,并作出響應(yīng)。(較為簡單的是文字傳送,擴展功能的時候可以添加文件傳送等,需要更加高級的技術(shù)支持。)發(fā)送數(shù)據(jù)管理。將數(shù)據(jù)發(fā)送到一個或者多個客戶端,即點對點的數(shù)據(jù)發(fā)送,或者信息群發(fā),有的時候需要支持廣播發(fā)送。根據(jù)具體的應(yīng)用程序的要求不一樣及版本的升級,服務(wù)器還有其他根據(jù)客戶需要的擴展升級功能需要完善??梢员日债斍傲餍械牧奶燔浖?,騰訊qq、飛信等進行功能完善。服務(wù)器模塊用

24、例圖服務(wù)器端詳細設(shè)計、服務(wù)器的啟動啟動流程圖:程序初始化啟動服務(wù)器運行停止服務(wù)器界面更新后臺更新提示信息啟動相應(yīng)線程、服務(wù)器對客戶端的監(jiān)聽判斷客戶端的連接需要用到socket類或者是tcplistener類。在系統(tǒng)選擇tcplistener類來監(jiān)視客戶端的連接。、服務(wù)器對客戶端的管理作為服務(wù)器,必須同時支持多個客戶端的連接,因此,就需要對多個客戶端進行管理。在該軟件中采用dictionary類來管理客戶端,客戶端具有唯一的標識,同時也是客戶端的編號。創(chuàng)建類imclient,用來表示一個已經(jīng)連接的客戶端,包含編號和連接套接字兩個重要的屬性,前者表示唯一的客戶端,后者用于數(shù)據(jù)收發(fā)。創(chuàng)建imserv

25、er類,它是服務(wù)器的主類,通過dictionary泛型來管理客戶端。對客戶端系統(tǒng)提供兩個事件,連接及斷開。并提供相應(yīng)的方法。、服務(wù)器處理客戶端消息服務(wù)器類完成了對客戶端的監(jiān)聽及連接管理的操作,另外的一個主要功能就是處理客戶端之間發(fā)送的消息,接受客戶端發(fā)送過來的消息并進行相應(yīng)的處理然后發(fā)送到目的客戶端。以上兩個步驟的具體流程如圖:啟動服務(wù)器啟動監(jiān)聽線程啟動接收線程連接分配參數(shù)添加客戶端列表斷開移除刪除相應(yīng)客戶端遍歷每個客戶端數(shù)據(jù)連接可用移除廣播更新客戶端列表接收解析處理客戶號廣播號廣播轉(zhuǎn)發(fā)、服務(wù)器的停止服務(wù)器的停止類似于服務(wù)器的開始流程,進行相應(yīng)的界面更新以及后臺更新。4.2 客戶端設(shè)計客戶端程

26、序開發(fā)步驟:僅從網(wǎng)絡(luò)通訊層次上看,網(wǎng)絡(luò)應(yīng)用程序客戶端的開發(fā)比服務(wù)器開打要簡單的多,通常只需要與一個服務(wù)器連接即可??蛻舳藨?yīng)用程序包括連接到服務(wù)器、發(fā)送數(shù)據(jù)到服務(wù)器、從服務(wù)器接收數(shù)據(jù)三個主要功能。在框架之下,客戶端的開發(fā)步驟通常包含四個步驟:1、連接到服務(wù)器指定端口,可以通過類和類來實現(xiàn)。2、通過網(wǎng)絡(luò)套接字類和類發(fā)送數(shù)據(jù)到服務(wù)器。3、通過獨立線程,從類和類接收來自服務(wù)器的數(shù)據(jù),并進行應(yīng)對處理。4、處理完成之后,斷開和服務(wù)器的連接,釋放網(wǎng)絡(luò)資源??蛻舳讼到y(tǒng)設(shè)計客戶端用例圖:客戶端詳細設(shè)計、連接服務(wù)器通過tcpclient類連接到服務(wù)器,需要所要連接的服務(wù)器的ip地址及端口號。通過界面獲取服務(wù)器的i

27、p地址和端口號作為參數(shù)傳遞進行連接。在客戶端界面中,連接服務(wù)器通過“連接”按鈕觸發(fā)。程序初始化連接界面初始化獲取參數(shù)界面更新成功后臺更新提示失敗、處理服務(wù)器消息在客戶端中,網(wǎng)絡(luò)傳輸層次上的數(shù)據(jù)處理比較簡單,主要是從服務(wù)器接收數(shù)據(jù),數(shù)據(jù)接收后的處理就隨著需求和功能上的不同而完全不同,可以很簡單,也可以非常復雜。在客戶端中,只需要接受來自服務(wù)器的消息,通過獨立的接受線程即可實現(xiàn)。連接服務(wù)器成功之后就啟動了接受線程。接受線程接收到數(shù)據(jù)之后,同樣是通過通訊協(xié)議處理模塊完成通訊協(xié)議的處理,這里就體現(xiàn)出通訊協(xié)議模塊獨立出來的好處。根據(jù)掃描的命令,進行相應(yīng)的操作。啟動接受顯示提示信息接受命令連接更新列表添加

28、客戶移除客戶端接受分配id接受消息更新id消息、發(fā)送聊天信息、斷開服務(wù)器4.3通訊協(xié)議模塊通訊協(xié)議設(shè)計服務(wù)器端和客戶端之間的通信需要定義一致的通訊協(xié)議,保證信息的正確傳送。通訊協(xié)議格式以簡單便于擴展為標準。定義的通訊格式是:#cmd#type#srcclient#distclient#content#end#它包含多個字段,不同字段用#分開,各字段意義如下:cmd:固定文本,表示命令的開始type:命令的類型srcclient:消息的來源客戶端distclient:消息的目的客戶端content:命令的具體內(nèi)容end:固定文本,表示命令的結(jié)束協(xié)議實現(xiàn)定義枚舉類型commandtypes,枚舉可

29、能用到的命令類型。定義類imcommand,用來表示單條通訊命令。最后通過類commandscanner實現(xiàn)對協(xié)議命令的打包解包,它需要結(jié)合數(shù)據(jù)類型commandtypes和imcommand。由于其實一組函數(shù)的集合,所以將其聲明為抽象類,所有的方法都是靜態(tài)成員。parsecommand在一個字節(jié)流數(shù)據(jù)中找到符合協(xié)議格式的命令,解析成imcommand命令返回。buildcommand將一個imcommand對象表示的類型轉(zhuǎn)換成需要發(fā)送的字節(jié)流數(shù)據(jù),自動轉(zhuǎn)換成標準格式。stringtobytes將一個string類型的字符串按照unicode格式轉(zhuǎn)換成byte字節(jié)流。bytestostring

30、將一個byte字節(jié)流按照unicode格式轉(zhuǎn)換成一個string類型的字符串。5系統(tǒng)具體實現(xiàn)5.1關(guān)鍵模塊的具體實現(xiàn)通訊模型服務(wù)器端和客戶端的信息交互模型應(yīng)答分配給客戶端通訊端口通過指定端口連接服務(wù)器端信息的處理模式以服務(wù)器端為主體分析信息傳遞的幾種模式,主要體現(xiàn)通訊的設(shè)計機制,以下為基本的流程圖,以后進行功能擴展的時候可以以此為基礎(chǔ),進行相關(guān)的功能豐富。例如傳遞信息的多媒體化等等。主要類的設(shè)計類的主要依賴關(guān)系圖:服務(wù)器的啟動this._server.stop()start(int port)this._receivethread.start( )this._receivethread.start( )e.i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論