網(wǎng)絡聊天系統(tǒng)的設計與實現(xiàn)_第1頁
網(wǎng)絡聊天系統(tǒng)的設計與實現(xiàn)_第2頁
網(wǎng)絡聊天系統(tǒng)的設計與實現(xiàn)_第3頁
網(wǎng)絡聊天系統(tǒng)的設計與實現(xiàn)_第4頁
網(wǎng)絡聊天系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

/網(wǎng)絡教化學院本科生畢業(yè)論文(設計)題目:網(wǎng)絡閑聊系統(tǒng)的設計和實現(xiàn)學習中心:層次:??破瘘c本科專業(yè):年級:年春/秋季學號:學生:指導老師:完成日期:年月日內容摘要隨著互聯(lián)網(wǎng)技術的飛速發(fā)展,網(wǎng)絡已經(jīng)成為人們生活中不行缺少的一部分,通過網(wǎng)上閑聊已經(jīng)成為人和人之間的網(wǎng)絡通信的閑聊,溝通和聯(lián)系的一種方式。因此,更多的網(wǎng)站起先供應在線閑聊功能。和此同時,以其便利,快捷,成本低的優(yōu)勢,閑聊室眾多企業(yè)的青睞,許多企業(yè)網(wǎng)站也加入了閑聊室,從而促進消費者和消費者和消費者之間的通信模塊。本文是一個軟件工程的在線閑聊系統(tǒng),專注于系統(tǒng)的開發(fā),運用系統(tǒng)的分析,設計和思維測試軟件工程學問來實現(xiàn)的描述,其中包括三個主要方面的軟件生命周期:軟件定義(問題定義,可行性探討,需求分析),軟件開發(fā)(總體設計,詳細設計,編碼,測試)和運行維護。通過運用軟件工程學問處理實際,加強的問題,清楚,牢靠的標準化,使得程序易于維護。該軟件運用JAVA編寫,具有良好的兼容性,易于實現(xiàn)。操作簡潔,運用便利結構簡潔,易于搜尋,好用的閑聊室。關鍵詞:網(wǎng)絡;通信;套接字 目錄 內容摘要 I引言 41概述 51.1課題探討背景和意義 51.2本文的主要內容及組織結構 52網(wǎng)絡應用系統(tǒng)開發(fā)技術介紹 72.1TCP/IP協(xié)議概述 72.2客戶/服務器模型 72.3Socket網(wǎng)絡編程 72.4開發(fā)工具和運行環(huán)境 82.5其他技術 83網(wǎng)絡閑聊系統(tǒng)的分析和設計 103.1可行性分析 103.2需求分析 103.3系統(tǒng)總體設計 113.3.1系統(tǒng)架構模型 12功能模塊設計 12系統(tǒng)通信設計 12數(shù)據(jù)庫設計 134網(wǎng)絡閑聊系統(tǒng)詳細設計及實現(xiàn) 144.1服務器端設計和實現(xiàn) 144.1.1服務器等待連接進程/線程設計 154.1.2服務器處理客戶端信息進程/線程設計 164.2客戶端設計和實現(xiàn) 164.2.1登陸模塊 164.2.2主界面模塊 164.2.3私聊模塊 194.2.4閑聊記錄管理模塊 215測試 235.1軟件測試概述 235.2測試策略和結果分析 23結論 28參考文獻 29引言隨著不斷投入的信息技術,網(wǎng)絡,作為一種新生事物,近年來現(xiàn)代技術的普及得到了前所未有的深化,網(wǎng)絡應用不斷涌現(xiàn)層出不窮,全部的層級和全部年齡的用戶供應不同的特性化服務。現(xiàn)代小型和中小型企業(yè)的領導人相識到,進一步提高企業(yè)信息化的必要性。為了使企業(yè)在瞬息萬變的信息時代生存,適應激烈的市場競爭,現(xiàn)代企業(yè)的要求是能夠特殊是領導具有實力的員工,實時通信系統(tǒng)是搭建在員工之間的溝通和溝通,是必要的條件。系統(tǒng)開發(fā)是一個特殊困難的系統(tǒng)工程。這里,對基本的方法和系統(tǒng)發(fā)展的方法進行介紹,和有內容是在論文里列出。為了提高市場競爭力,我們必需全面調查和對市場的詳細探討,同時也有良好的客戶服務。企業(yè)應當在困難的環(huán)境對策。員工和員工和領導之間的溝通立刻x性就顯得尤為重要,對于企業(yè)網(wǎng)上閑聊系統(tǒng)是一種溝通和溝通的平臺,系統(tǒng)可以成為中小企業(yè)溝通的志向平臺。假如信息能剛好反饋,剛好處理并做出相應的動作,將能進一步加強在現(xiàn)代經(jīng)濟市場的中小型企業(yè)的競爭力。網(wǎng)絡通信是網(wǎng)絡應用的一個重要體現(xiàn)。即時通訊是網(wǎng)絡應用的一個重要方面。閑聊系統(tǒng),主要用于小型企業(yè),學?;蛐⌒途钟蚓W(wǎng)。該應用程序使得短距離通信更高效,更便捷,更高效,以反映現(xiàn)代IM的特點。該系統(tǒng)可滿足中小型企業(yè),學校內部網(wǎng)絡即時通訊需求的須要,內部網(wǎng)絡業(yè)務的正常環(huán)境下,供應了即時通信的實力,本系統(tǒng)接受的JAVA開發(fā)。該系統(tǒng)可為中小型企業(yè)的共同努力,相互溝通供應了一個功能強大的工具,在局域網(wǎng)中運用這個系統(tǒng),可以為企業(yè)供應員工溝通的幫助,以提高工作效率。

1概述1.1課題探討背景和意義隨著現(xiàn)代技術的普及和信息技術的不斷普及,網(wǎng)絡作為一種新事物,近年來得到了前所未有的普及和深化,網(wǎng)絡應用層出不窮,給用戶的各個階層和各個年齡段供應了不同的特性化服務。和現(xiàn)代中小企業(yè)的領導相識到進一步提高企業(yè)信息化的必要性。為使企業(yè)在瞬息萬變的信息時代生存下來,適應激烈的市場競爭,現(xiàn)代企業(yè)的要求是能夠溝通,尤其是領導者和員工之間的共同實力和實時通信系統(tǒng)是在這樣的條件下誕生的。系統(tǒng)開發(fā)是一個特殊困難的系統(tǒng)工程。介紹了系統(tǒng)開發(fā)的基本過程和方法,并對相關文獻進行了介紹。為了提高市場競爭力,我們必需充分調查和詳細探討市場,而且還有一個良好的客戶服務。企業(yè)在困難環(huán)境中應作出對策。員工和員工之間的即時溝通和領導是特殊重要的,網(wǎng)上閑聊系統(tǒng)是企業(yè)的一種溝通和溝通的平臺,系統(tǒng)可以成為中小企業(yè)溝通的志向平臺。假如能夠剛好反饋信息,剛好處理并做出相應的行動,將能夠進一步提中學小企業(yè)在現(xiàn)代經(jīng)濟市場中的競爭力。網(wǎng)絡通信是網(wǎng)絡應用的一個重要體現(xiàn)。即時消息是網(wǎng)絡應用的一個重要方面。該閑聊系統(tǒng)主要用于小企業(yè)、學校或小局域網(wǎng)。此應用使短距離通信更高效、便利,更有效地體現(xiàn)了現(xiàn)代通信的特點。該系統(tǒng)可以滿足中小企業(yè)的需求,學校內部網(wǎng)絡即時通信的需求,內部網(wǎng)絡的正常操作環(huán)境下,供應即時通信的實力,本系統(tǒng)接受JAVA開發(fā)。該系統(tǒng)可以為中小企業(yè)的協(xié)同工作,相互溝通供應一個強大的工具,利用該系統(tǒng)在局域網(wǎng)中,可以為企業(yè)員工溝通供應幫助,提高工作效率。1.2本文的主要內容及組織結構本文探討的內容為局域網(wǎng)閑聊系統(tǒng)的設計和實現(xiàn)。本文的組織結構:全文共分五章。第一章,主要部分是概述。其次章,介紹網(wǎng)絡應用系統(tǒng)開發(fā)技術介紹。第三章,介紹網(wǎng)絡閑聊系統(tǒng)的分析和設計。第四章,介紹網(wǎng)絡閑聊系統(tǒng)詳細設計及實現(xiàn)。第五章,介紹相關測試部分的內容。2網(wǎng)絡應用系統(tǒng)開發(fā)技術介紹2.1TCP/IP協(xié)議概述TCP/IP是專為大型網(wǎng)絡協(xié)議的行業(yè)定制標準套件。在TCP/IP協(xié)議族包括IPv4和IPv6的套協(xié)議。對TCP/IP的標準是發(fā)表在一系列的文件名為RFC文檔。在一個基于TCP/IP的網(wǎng)絡,路由器可以轉發(fā)給路由器,一個節(jié)點或者是主機或路由器。在一個基于TCP/IP的網(wǎng)絡,一個子網(wǎng)是被路由器運用相同的IP地址前綴的一個或多個LAN段,和一個網(wǎng)絡是通過路由器連接的兩個或更多個子網(wǎng)。2.2客戶/服務器模型客戶/服務架構結構簡稱C/S結構,是一種網(wǎng)絡架構,它把客戶端(Client)(通常是一個接受圖形用戶界面的程序)和服務器(Server)區(qū)分開來。每一個客戶端軟件的實例都可以向一個服務器或應用程序服務器發(fā)出請求。有許多不同類型的服務器,例如文件服務器、游戲服務器等。C/S通過不同的途徑應用于許多不同類型的應用程序,最常見就是目前在因特網(wǎng)上用的網(wǎng)頁。例如,當你在維基百科閱讀文章時,你的電腦和網(wǎng)頁閱讀器就被當做一個客戶端,同時,組成維基百科的電腦、數(shù)據(jù)庫和應用程序就被當做服務器。當你的網(wǎng)頁閱讀器向維基百科請求一個指定的文章時,維基百科服務器從維基百科的數(shù)據(jù)庫中找出全部該文章須要的信息,結合成一個網(wǎng)頁,再發(fā)送回你的閱讀器。2.3Socket網(wǎng)絡編程套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的操作單元??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙向通信的端點,它構成了單個主機內及整個網(wǎng)絡間的編程界面。套接字存在于通信域中。通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。套接字通過通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時確定要執(zhí)行某種說明程序)。套接字可以依據(jù)通信性質分類,這種性質對于用戶時可見的.應用程序一般僅在同一類的套接字間通信.不過只要底層的通信協(xié)議允許,不同類型的套接字間也照樣可以通信。進入九十年頭后,隨著計算機和網(wǎng)絡技術的發(fā)展,許多數(shù)據(jù)處理系統(tǒng)都接受開放系統(tǒng)結構的客戶機/服務器網(wǎng)絡模式,即客戶機提出任務請求,通過網(wǎng)絡發(fā)送給服務器,由服務器做相應處理,執(zhí)行被請求的任務,然后將結果返回給客戶機。例如:銀行ATM的前置機和數(shù)據(jù)處理的主機之間即構成客戶機/服務器網(wǎng)絡模式;電話銀行的前置機和銀行數(shù)據(jù)處理機之間也構成這種網(wǎng)絡模式結構等。這樣,如何在前置機和數(shù)據(jù)主機之間進行信息交換,即進程網(wǎng)絡通信,就成為實現(xiàn)這種網(wǎng)絡模式的基礎。而TCP/IP的套接字技術是解這一問題的有力工具。它從提出時就始終發(fā)揮著愈來愈重要的作用,并已成為UNIX操作系統(tǒng)下TCP/IP網(wǎng)絡編程標準;甚至WINDOW、JAVA都配有它的通用接口。有了這個強有力的工具,我們可以實現(xiàn)異種機、異種操作系統(tǒng)應用程序間的相互連接和通信。套接字是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙向通信的端點。它構成了在單個主機內及整個網(wǎng)際間的編程界面。一般來說,跨機應用進程之間要在網(wǎng)絡環(huán)境下進行通信,必需要在網(wǎng)絡的每一端都要建立一個套接字,兩個套接字之間是可以建立連接的,也是可以無連接的,并通過對套接字的“讀”、“寫”操作實現(xiàn)網(wǎng)絡通信功能。類似于UNIX系統(tǒng)中的I/O概念,像文件那樣有打開、讀、寫、關閉的方式。2.4開發(fā)工具和運行環(huán)境本試驗的主要開發(fā)工具是Eclipse,Eclipse是開放源代碼的項目,可以在網(wǎng)上免費下載Eclipse的最新版本,一般Eclipse供應幾個下載版本:Release,StableBuild,IntegrationBuild和NightlyBuild。Eclipse本身是用Java語言編寫,但下載的壓縮包中并不包含Java運行環(huán)境,須要用戶自己另行安裝JRE,并且要在操作系統(tǒng)的環(huán)境變量中指明JRE中bin的路徑。2.5其他技術諸如Web服務器、數(shù)據(jù)庫服務器、文件服務器或郵件服務器之類的許多服務器應用程序都面對處理來自某些遠程來源的大量短小的任務。請求以某種方式到達服務器,這種方式可能是通過網(wǎng)絡協(xié)議(例如HTTP、FTP或POP)、通過JMS隊列或者可能通過輪詢數(shù)據(jù)庫。不管請求如何到達,服務器應用程序中經(jīng)常出現(xiàn)的狀況是:單個任務處理的時間很短而請求的數(shù)目卻是巨大的。構建服務器應用程序的一個過于簡潔的模型應當是:每當一個請求到達就創(chuàng)建一個新線程,然后在新線程中為請求服務。事實上,對于原型開發(fā)這種方法工作得很好,但假如試圖部署以這種方式運行的服務器應用程序,那么這種方法的嚴峻不足就很明顯。每個請求對應一個線程(thread-per-request)方法的不足之一是:為每個請求創(chuàng)建一個新線程的開銷很大;為每個請求創(chuàng)建新線程的服務器在創(chuàng)建和銷毀線程上花費的時間和消耗的系統(tǒng)資源要比花在處理實際的用戶請求的時間和資源更多。除了創(chuàng)建和銷毀線程的開銷之外,活動的線程也消耗系統(tǒng)資源。在一個JVM里創(chuàng)建太多的線程可能會導致系統(tǒng)由于過度消耗內存而用完內存或“切換過度”。為了防止資源不足,服務器應用程序須要一些方法來限制任何給定時刻處理的請求數(shù)目。線程池為線程生命周期開銷問題和資源不足問題供應了解決方案。通過對多個任務重用線程,線程創(chuàng)建的開銷被分攤到了多個任務上。其好處是,因為在請求到達時線程已經(jīng)存在,所以無意中也消退了線程創(chuàng)建所帶來的延遲。這樣,就可以立刻為請求服務,使應用程序響應更快。而且,通過適當?shù)卣{整線程池中的線程數(shù)目,也就是當請求的數(shù)目超過某個閾值時,就強制其它任何新到的請求始終等待,直到獲得一個線程來處理為止,從而可以防止資源不足。3網(wǎng)絡閑聊系統(tǒng)的分析和設計3.1可行性分析計算機技術的快速發(fā)展,特殊是計算機網(wǎng)絡的發(fā)展,越來越深刻的變更了人們生活的方方面面。使得人們能以更低廉的價格,開發(fā)出更便利、更好用的網(wǎng)絡工具。各種在線服務系統(tǒng),更是深刻的影響了人們的聯(lián)系和溝通方式,使得人們可以自傲遠隔千里之遙隨時通訊。過去的種種陳舊的聯(lián)系方式,已經(jīng)不能滿足現(xiàn)代生活的須要。網(wǎng)上閑聊系統(tǒng)作為一種便利人們之間聯(lián)系的運用系統(tǒng)便應運而生。網(wǎng)上閑聊系統(tǒng)是人們進行溝通和聯(lián)系供應的一個平臺。通過供應完善的網(wǎng)上閑聊系統(tǒng)的管理,可以達到增進人和人之間的溝通和溝通。在Internet上,qq,MSN,飛信等網(wǎng)上軟件,極大程度便利了各地友人之間的聯(lián)系,也使世界一下子縮小了,不管你在哪里,只要你上了網(wǎng),打開這些軟件,就可以給你的摯友發(fā)信息。現(xiàn)在,企業(yè),機關,學校都紛紛建立起自己的局域網(wǎng)。在局域網(wǎng)里,雖然可以通過文件共享的方式進行通訊嗎,但單單運用這種方式,是不便利的。首先在局域網(wǎng)里的網(wǎng)上鄰居,只能看到機器名,不清楚對方是誰,也不知道對方機器有什么資源可以共享,而且當局域網(wǎng)機器許多時,這種方式更加麻煩?,F(xiàn)在有許多局域網(wǎng)內機器不運用服務器通訊軟件,這種軟件小巧而且靈巧,也能解決一部分問題。但是有服務器通訊的軟件,有著不行比擬的優(yōu)勢;可以發(fā)送離線信息,不管用戶當時是否在線,下線上線時,就可以看到這條信息了;可以保存用戶的個人信息或介紹,供人查看。而且,不適用服務器的通訊軟件,是以機器為通訊單元的,而有服務器的通訊軟件是以人為通訊單元的。總之,有服務器的通訊軟件在局域網(wǎng)上,還是有很大的用途的,喂局域網(wǎng)上通訊,帶來極大地便利。3.2需求分析運用JAVA及數(shù)據(jù)庫技術相結合,編寫一個閑聊系統(tǒng)軟件。這個系統(tǒng)供應多個用戶剛好并發(fā)通信的平臺。未注冊用戶可以注冊成系統(tǒng)會員,已注冊用戶可以通過登錄進入閑聊系統(tǒng)。在系統(tǒng)中用戶可以選擇進入某一個閑聊分區(qū)去閑聊,也可以和特定的用戶閑聊。

供應一個在線實時溝通平臺。進入系統(tǒng)的用戶可以選擇自己的閑聊對象。用戶沒有專業(yè)的計算機學問,所以須要一個友好簡潔的界面。用戶有消遣須要,所以須要供應消遣節(jié)點。用戶通過軟件進行溝通,應供應多種方式,如網(wǎng)絡視頻,音頻閑聊等。要求牢靠性高,能在由于系統(tǒng)問題或其它緣由產(chǎn)生錯誤后,作出相對應處理,比如網(wǎng)絡初始化失敗、服務器不在線等,可以提示用戶平安退出本程序,在出現(xiàn)不行知的錯誤以后,可以盡量平安的退出程序。在程序的設計過程中,要求能盡可能多的設想到用戶運用過程中可能發(fā)生的事務,并能在推斷事務后做出相應的處理,使程序具有較高的容錯性能。具有宜操作性,程序簡潔易懂,簡潔上手運用。設計界面是,簡化界面的困難性,模擬QQ等現(xiàn)有即時通訊工具的界面,運用戶能很簡潔看懂并運用。模塊化設計此軟件的功能,不同的模塊實現(xiàn)不同的功能,使得軟件易于以后的維護和擴展,在以后可以更好的完善本軟件的功能,更便利于在工作中的應用。3.3系統(tǒng)總體設計依據(jù)網(wǎng)絡應用程序的特點,網(wǎng)絡在線閑聊系統(tǒng)應就有即時,快速的特點。服務器端和客戶端應就有不同的功能特性。對于服務器端應能夠正確地建立和客戶端的連接并能正確地斷開,能即時地接收、處理和發(fā)送接收到的數(shù)據(jù)。能剛好地通知在線用戶當前好友在線狀況,能夠處理非正常數(shù)據(jù)的實力。對于客戶端應能夠快速地檢查是否能夠連接到服務器端。能正確的獲得和反映當前好友在線狀況。能夠正確的和特定好友溝通。能剛好地接收到服務器端地數(shù)據(jù),并能即時處理數(shù)據(jù),并能將處理結果反映給用戶。服務器端能夠正確地、無沖突地啟動服務器。監(jiān)聽指定的端口,等待用戶的連接。

建立和客戶端的邏輯連接,并能通知其他好友。

向新進入的好友發(fā)出已上線的好友名單。接收客戶端的消息請求,并能正確無誤地處理消息,并能發(fā)出消息到客戶端。反映當前在線人數(shù)和在線好友狀況。剛好地反映發(fā)出地消息和閑聊消息。當好友斷開和服務器端地連接時,服務器能夠正確地斷開連接,并通知其他用戶。當用戶違反閑聊系統(tǒng)規(guī)定時,服務器系統(tǒng)管理員能夠斷開和此用戶的連接。當服務器關閉時,應通知全部用戶??蛻舳四軌蛘_啟動應用程序,并能向服務器發(fā)出連接請求。反映當前好友在線狀況。能夠向群體或指定好友發(fā)出消息能夠剛好接收好友發(fā)出消息,并通知用戶。能夠正確地斷開和服務器端地的連接。3.3.1系統(tǒng)架構模型系統(tǒng)的整體結構如圖所示,包含了主界面,注冊模塊,登陸模塊,私聊模塊,群聊模塊,首先要在注冊模塊完成注冊,然后進入登陸模塊登入才能進入主界面,主界面是一個選擇可以選擇進入私聊模塊還是群聊模塊。功能模塊設計登陸模塊,須要完成登陸界面,和登陸會話的維持。注冊模塊,須要完成向數(shù)據(jù)庫插入用戶數(shù)據(jù)然后進行重復性檢查。私聊模塊,構建兩個套接字的連接方式,完成單獨的連接。群聊模塊,構建一個廣播室,全部套接字的發(fā)送都回轉發(fā)到該廣播室內的其他套接字當中。系統(tǒng)通信設計客戶端主要通過套接字請求發(fā)送對方的ID給服務器,服務器在數(shù)據(jù)庫當中確認該用戶在線就把對應的用戶地址返回給客戶端,這個時候客戶端就可以主動去連接對應的用戶,用戶在收到連接請求以后須要確認該請求來自服務器分發(fā)的任務,經(jīng)過驗證以后就可以去和客戶端建立起套接字的連接。該過程的主體是客戶端到服務器的請求,須要遵循預先定義好的協(xié)議進行請求,比如發(fā)送指令“getuserida”給服務器,并且?guī)仙矸蒡炞C,也就是密碼的加密信息給服務器,服務器進行驗證以后就可以在數(shù)據(jù)庫當中查找到對應的客戶信念并且把a的信息返回給客戶端,這個時候客戶端就能夠主動發(fā)起和a的連接,而不再須要經(jīng)過服務器的確認了,其中有一個問題就是假如中途因為網(wǎng)絡緣由斷線的話,須要重新請求服務器獲得用戶的在線狀態(tài),這樣就能完成短線的重連。當然客戶端的干脆連接并不是完全沒有防衛(wèi)的,必需對被動連接的源進行驗證以后才能允許對應的套接字進行連接,比如運用私有協(xié)議,或者自定義的加密方式等等,這些手段在端到端上可以起到加密的作用。最終閑聊的內容依據(jù)自定義的格式,以0xEEFF開頭然后緊跟一個時間戳,表示消息發(fā)送的時間。數(shù)據(jù)庫設計表3.1user的結構字段名數(shù)據(jù)類型長度主鍵否描述id自動編號是自動編號password文本50否密碼profile文本256否簡介time日期/時間否活躍時間表3.2message的結構字段名數(shù)據(jù)類型長度主鍵否描述id文本是發(fā)送者dst文本是接受者time日期/時間是發(fā)表時間用戶表是一個用戶注冊表,每有一個用戶注冊,表中就會添加一項,修改密碼則對應的是字段的更新。另外消息表是一個消息歷史記錄的表,每次發(fā)送消息的時候都會更新這個表,首先id是指發(fā)送著的id,而dst指的是接受者的id,時間以發(fā)送方發(fā)出消息的時間為準,消息目前只支持文字,不支持其他格式例如圖片的信息。

4網(wǎng)絡閑聊系統(tǒng)詳細設計及實現(xiàn)4.1服務器端設計和實現(xiàn)服務端主要實現(xiàn)的是TCP連接的管理,當有一個消息到的時候須要轉發(fā)給對應的客戶端,這里定義了幾個事務,首先是連接,斷開,和發(fā)送,對于連接事務,確定對應的用戶在線,對于斷開事務則是把對應用戶從在線狀態(tài)的列表中去除,對于發(fā)送事務,確認發(fā)送方和接收方同時在線,則把消息發(fā)送到接收方。服務器會對邏輯進行處理。圖4.1消息的狀態(tài)轉換圖4.2服務器的主流程服務器首先會處理請求,然后用戶列表會進行更新,始終保持該列表和在線的用戶同步,對于須要轉發(fā)的請求,發(fā)送給對應的接收方,目前的設計是一個單點設計,全部的請求都要經(jīng)過服務器的轉發(fā)才能到達接收方,最終達到閑聊的目的。4.1.1服務器等待連接進程/線程設計圖4.3監(jiān)聽線程處理邏輯首先,服務器開啟監(jiān)聽線程,當有消息到達的時候就復制處理線程,然后重新進行監(jiān)聽,從而到達并發(fā)處理請求的目的。

服務器端(Server)是指在網(wǎng)絡編程中被動等待連接的程序,服務器端一般實現(xiàn)程序的核心邏輯以及數(shù)據(jù)存儲等核心功能。服務器端的編程步驟和客戶端不同,是由四個步驟實現(xiàn),服務器端屬于被動等待連接,所以服務器端啟動以后,不須要發(fā)起連接,而只須要監(jiān)聽本地計算機的某個固定端口即可。這個端口就是服務器端開放給客戶端的端口,服務器端程序運行的本地計算機的IP地址就是服務器端程序的IP地址。

獲得連接,當客戶端連接到服務器端時,服務器端就可以獲得一個連接,這個連接包含客戶端的信息,例如客戶端IP地址等等,服務器端和客戶端也通過該連接進行數(shù)據(jù)交換。一般在服務器端編程中,當獲得連接時,須要開啟特地的線程處理該連接,每個連接都由獨立的線程實現(xiàn)。交換數(shù)據(jù),服務器端通過獲得的連接進行數(shù)據(jù)交換。服務器端的數(shù)據(jù)交換步驟是首先接收客戶端發(fā)送過來的數(shù)據(jù),然后進行邏輯處理,再把處理以后的結果數(shù)據(jù)發(fā)送給客戶端。簡潔來說,就是先接收再發(fā)送,這個和客戶端的數(shù)據(jù)交換數(shù)序不同。其實,服務器端獲得的連接和客戶端連接是一樣的,只是數(shù)據(jù)交換的步驟不同。當然,服務器端的數(shù)據(jù)交換也是可以多次進行的。在數(shù)據(jù)交換完成以后,關閉和客戶端的連接。這就是服務器端編程的模型,只是TCP方式是須要建立連接的,對于服務器端的壓力比較大,而UDP是不須要建立連接的,對于服務器端的壓力比較小罷了。4.1.2服務器處理客戶端信息進程/線程設計我們應當充分利用多核的優(yōu)勢,這會是日后的發(fā)展方向。讓每個進程要么處理大流量小計算量的工作;要么處理小流量大計算量的工作。這樣多個進程放在一臺物理機器上可以更加充分的利用機器的資源。單線程多進程的設計,個人認為更能發(fā)揮多核的優(yōu)勢。這是因為沒有了鎖,每個線程都可以以最大吞吐量工作。增加的負擔只是進程間的數(shù)據(jù)復制,在網(wǎng)游這種困難邏輯的系統(tǒng)中,一般不會比邏輯計算更早成為瓶頸。假如擔憂,單線程沒有利用多核計算的優(yōu)勢,不妨考慮以下的例子:計算a/b+c/d+e/f,假如我們在一個進程中開三條線程利用三個核同時計算a/bc/de/f當然不錯,但它增加了程序設計的困難度。而換個思路,做成三個進程,第一個只算a/b把結果交給其次個進程去算c/d于之的和,再交個第三個進程算e/f。對于單次運算來算,雖然成本增加了。它須要做額外的進程間通訊復制中間結果。但,假如我們有大量連續(xù)的這樣的計算要做,整體的吞吐量卻增加了。因為在算某次的a/b的時候,前一次的c/d可能在另一個核中并行計算著。4.2客戶端設計和實現(xiàn)登陸模塊登陸模塊的實現(xiàn)過程有下面幾個步驟:(1)獲得用戶名,用戶選擇的頭像,服務器的IP地址和端口號的信息;(2)確認登陸后初始化,創(chuàng)建套接字,連接服務器,向服務器發(fā)送用戶登陸信息,使其他在線用戶得到本用戶上線的消息;(3)初始化過程中顯示在線好友,并且對用戶的好友上、下線進行管理。主界面模塊整個程序是以服務器和客戶端之間的通信事務而驅動的,本程序劃分為三大模塊,但最基礎的都是得到服務器傳來的消息,對消息進行判別再分別交給不同模塊進行處理。本設計的接收消息過程很抽象,筆者在對設計詳述之前首先將客戶端接收消息的過程提純出來,其示意圖如圖4.1所示。事先已對套接字和端口進行過綁定,一旦端口有數(shù)據(jù)來到,就會觸發(fā)CMainSocket對象的CMainSocket::OnReceive()函數(shù)。OnReceive()函數(shù)中調用的Receive()函數(shù)就可以得到端口進來的以Message結構體封裝的消息。再將Message的內容作為WM_RECEIVEMESSAGE的WPARAM參數(shù)發(fā)送。WM_RECEIVEMESSAGE為自定義的消息,CMyQQClientDlg的OnReceiveMessage()為此消息對應的消息處理函數(shù)。OnReceiveMessage()函數(shù)處理從wParam參數(shù)中傳送來的以Message結構體封裝的消息內容,針對不同的消息類型進行不同的處理。在以下的每個模塊中,會將OnReceiveMessage()函數(shù)進行分解,各模塊只針對自己的部分進行處理。圖4.4接收消息過程管理模塊流程圖如圖4.5所示。 管理模塊的功能實現(xiàn)最主要由CLoginLoad、CMyQQClientDlg兩個類來實現(xiàn)。在下文介紹詳細功能時,會對兩個對話框控件進行分析。圖4.5管理模塊流程圖CLoginLoad:CLoginLoad是用戶登陸的對話框,基于CDialog類。CloginLoad的登錄對話框的界面如圖4-3所示。其主要功能是獲得用戶名、用戶選擇的頭像等信息,并且填寫服務器IP和端口號。此對話框主要有兩個按鈕,登陸按鈕和退出按鈕。用戶輸入昵稱和密碼后可按登陸按鈕,如不想登陸按退出按鈕退出程序。圖4.6CLoginLoad用戶登陸界面CMyQQClientDlg:CMyQQClientDlg是用戶登陸后顯示好友列表的對話框,基于CDialog類,CMyQQClientDlg也是本程序最核心的對話框。此對話框只響應用戶雙擊圖標的事務,雙擊后,創(chuàng)建閑聊對話框,然后起先進行閑聊。CMyQQClientDlg對話框的界面如圖4.7所示。圖4.7CMyQQClientDlg好友列表對話框私聊模塊發(fā)送信息模塊閑聊模塊中,發(fā)送信息模塊的實現(xiàn)過程有下面幾個步驟:(1)用戶選擇一個好友為閑聊對象;(2)識別是否已經(jīng)和此好友處于閑聊狀態(tài)(有對應的閑聊對話框打開),已處于閑聊狀態(tài)的,將該對話框顯示到前臺,未處于閑聊狀態(tài)的,創(chuàng)建一個新的對話框;(3)用戶按下發(fā)送按鈕后,將閑聊內容發(fā)送出去(服務器接收);(4)在本地即時閑聊內容顯示的編輯框中添加發(fā)送的內容。2.接收信息模塊閑聊模塊中,接收信息模塊的實現(xiàn)過程有下面幾個步驟:(1)推斷接收到信息的類型,是否為好友發(fā)來信息;(2)若該好友第一次發(fā)送信息(沒有和此好友閑聊的對話框),提示用戶有新的消息;(3)用戶按下查看消息的提示后,創(chuàng)建新的對話框,加到對話框鏈表中并顯示該對話框,假如已經(jīng)和此好友處于閑聊狀態(tài),干脆將對應對話框調到前臺;(4)在對應的對話框中顯示傳遞過來的消息。圖4.8CchatDialog用戶閑聊對話框閑聊模塊主要由CChatDialog、CChatAction兩個類來實現(xiàn)。CChatDialog:CChatDialog是和好友進行閑聊的對話框,基于CDialog類。CChatDialog共有兩個Button控件和兩個RichEdit控件。第一個RichEdit用于顯示閑聊記錄,即雙方對話的內容,其次個RichEdit用于用戶輸入消息。發(fā)送按鈕響應用戶的發(fā)送請求,即用戶在輸入消息后按下按鈕,程序即將RichEdit的內容發(fā)送給服務器。查看閑聊記錄是用于響應用戶查看閑聊記錄的請求。此部分內容在閑聊記錄的管理模塊中詳述。CChatDialog的界面如圖4.8所示。CChatAction:CChatAction是用于提示用戶有新消息的提示對話框,基于CDialog類。CChatAction有一個StaticText控件和一個Button按鈕。StaticText的靜態(tài)文本框用于顯示“您有一條新消息,請留意查收”的提示信息。Butoon用于響應用戶查看新消息的事務。CChatAction的界面如圖4.9所示。圖4.9CChatAction對話框基于CSocket類的CMainSocket類中,定義了類型為CObArray的m_ChatDlgs成員變量,m_ChatDlgs對全部創(chuàng)建好的閑聊對話框進行了管理。是本論文設計的閑聊程序中應用到的核心的技術。閑聊事務的產(chǎn)生有兩種可能性,一是用戶自身主動向好友發(fā)出閑聊請求,二是好友向用戶發(fā)出閑聊請求,用戶接受請求。兩種事務中,無論是哪種形式,只要閑聊事務起先,程序就為用戶創(chuàng)建一個新的類型為CChatDialog的閑聊對話框,對話框以m_ClientName和m_UserName為標識(因為閑聊事務是兩方之間的對話,只要雙方都確定下來了,就能確定此閑聊事務)。再將新建的閑聊對話框加入到鏈表中。對于信息的傳送,閑聊記錄的查看等過程中,都須要對m_ChatDlgs的鏈表進行操作。m_ChatDlgs和CChatDialog的關系如圖4.10所示。在CMainSocket類中,改寫了CSocket的OnReceive()函數(shù),一旦有消息進入端口,就會觸發(fā)OnReceive()函數(shù),在OnReceive()內部調用Receive()函數(shù),就得到了信息的內容。之后可以對消息進行一系列的處理。本設計中自定義了WM_RECEIVEMESSAGE的消息,作為端口得到消息的提示,用SendMessage()將WM_RECEIVEMESSAGE消息發(fā)送出,并在程序中添加對應得消息響應函數(shù),來處理端口得到的消息。消息隨著WM_RECEIVEMESSAGE的WPARAM流淌。圖4.10m_ChatDlgs和CChatDialog的關系發(fā)送信息的主要流程如圖4.11所示。圖4.11發(fā)送信息流程圖閑聊記錄管理模塊閑聊記錄管理模塊的實現(xiàn)過程有下面幾個步驟:(1)用戶請求查看閑聊記錄,向服務器發(fā)送請求;(2)服務器向用戶發(fā)送對應的閑聊記錄,客戶端接收信息,識別發(fā)送的信息為閑聊記錄;(3)顯示閑聊記錄;(4)假如用戶按下保存閑聊記錄按鈕,則保存閑聊記錄。用戶在進行閑聊的過程中,可能會按下“查看閑聊記錄”的按鈕,閑聊只關系到用戶雙方,默認為用戶想查看的閑聊記錄為自己和正在對話的另一方的內容。所以服務器端在進行數(shù)據(jù)庫的查找時,也是以閑聊雙方的姓名匹配為查找條件的。閑聊記錄管理模塊流程圖如圖4.12所示。圖4.12閑聊記錄管理模塊閑聊記錄管理模塊中最主要涉及到一個類CReadSession,該類是用于用戶請求查看閑聊記錄后,用于顯示閑聊記錄的對話框。該對話框基于CDialog類。主要有一個Button控件,用于保存閑聊記錄。該對話框如圖4-12所示。圖4.13閑聊記錄對話框5測試5.1軟件測試概述軟件測試是這樣的一個過程,它執(zhí)行一個程序或一個系統(tǒng),目的是發(fā)覺錯誤。或者,它包括這樣一些活動,只要這些活動是評價一個程序(或系統(tǒng))的屬性和實力、以確定程序或系統(tǒng)是否滿足了要求。軟件和物理加工不一樣,物理加工接受了輸入,就產(chǎn)生輸出。軟件不一樣的地方在于它的失效方式不同。絕大部分物理系統(tǒng)以固定(通常比較少)的方式失效。然而,軟件卻有多種奇異的失效方式。檢測全部的失效模式,通常是行不通的。

和大多數(shù)物理系統(tǒng)不同,軟件中的大部分缺陷是設計的錯誤,不是制造上的缺陷。軟件不會用壞,也不會磨損—一般地說,若不升級和退市,它就不會變更。所以,軟件一旦發(fā)布了,設計上的缺陷或者叫bug就會埋入到軟件之中并始終留在那里,直到有一天它會被觸發(fā)而發(fā)作。

在一個中等大小的軟件模塊里,軟件的bugs幾乎總是存在的。這不是因為程序員的馬虎和不負責任,而是因為軟件的困難性通常是不行處理的,人管理困難性的實力是有限的。還有一點,對應困難系統(tǒng),設計的缺陷是不行能根除的。

同樣由于困難性,發(fā)覺軟件中設計的缺陷也是很困難的。因為軟件和任何數(shù)字系統(tǒng)不是連續(xù)的,測試邊界值對保證其正確性是不夠的。全部可能的值都須要測試和驗證,但是完全的測試是不行行的。對于一個簡潔不過的小程序,兩個32位的整數(shù)相加,會有2的64次方個測試用例,即使每秒鐘測試幾千個用例,完全測試這個小程序也須要幾百年。很明顯,對于一個實際的軟件模塊,其困難性遠遠超過剛才舉的那個例子。假如輸入來自真實世界,問題將變得更加糟糕,因為時間和不行預料的環(huán)境因素,以及人的交互,都有可能被考慮成為輸入?yún)?shù)。

程序的動態(tài)性使問題更加困難。假如在初步測試中發(fā)覺了一個失效,給代碼做了修改,軟件可能現(xiàn)在通過了一個原來不能通過的測試用例。但是原來通過的測試用例現(xiàn)在不能再保證通過了??紤]到這種可能性,測試應當重新起先。可測試的費用成本可是有限制的。5.2測試策略和結果分析針對本軟件項目制定測試支配。1.登陸功能輸入條件編號有效等價類編號無效等價類輸入昵稱1楊穎or許野or王元杰4NULL輸入服務器IP2or服務器主機IP地址5NULL6非and非服務器主機IP地址點擊確定按鈕按鈕3單擊確定按鈕7未單擊確定按鈕8單機取消按鈕測試用例 用例編號用例預期輸出覆蓋等價類輸入結果1昵稱:楊穎服務器IP:單擊確定按鈕登陸成功跳轉至主界面1,2,3輸入昵稱:楊穎輸入服務器IP:單擊確定按鈕正確2昵稱:服務器IP:單擊確定按鈕提示連接服務器失敗,再試一次?4輸入昵稱:輸入服務器IP:單擊確定按鈕不正確3昵稱:楊穎服務器IP:單擊確定按鈕提示連接服務器失敗,再試一次?5輸入昵稱:楊穎輸入服務器IP:單擊確定按鈕不正確4昵稱:楊穎服務器IP:單擊確定按鈕提示連接服務器失敗,再試一次?6輸入昵稱:楊穎輸入服務器IP:單擊確定按鈕不正確5昵稱:楊穎服務器IP:7輸入昵稱:楊穎輸入服務器IP:不正確6昵稱:服務器IP:單擊取消按鈕回到上一界面8輸入昵稱:楊穎輸入服務器IP:單擊取消按鈕不正確2.選擇閑聊方式輸入條件編號有效等價類編號無效等價類選擇閑聊方式1選擇私聊3無操作2選擇群聊測試用例用例編號用例預期輸出覆蓋等價類輸入結果1選擇私聊選擇成功跳轉至私聊界面1單擊私聊按鈕正確2選擇群聊選擇成功跳轉至群聊界面2單擊群聊按鈕正確3無操作照舊停留在主界面3無不正確3.選擇閑聊對象輸入條件編號有效等價類編號無效等價類選擇閑聊對象1選擇用戶3無操作2干脆在輸入框打字測試用例用例編號用例預期輸出覆蓋等價類輸入結果1選擇某一用戶用戶選擇成功跳轉至該用戶私聊界面1雙擊擊相應用戶正確2在輸入框打字信息顯示在公屏上2雙擊相應群正確3無操作照舊停留在上一界面3無不正確4.起先閑聊輸入條件編號有效等價類編號無效等價類輸入信息1輸入相應的信息或文字3未輸入任何東西發(fā)送按鈕2點擊發(fā)送按鈕4未按下發(fā)送按鈕測試用例用例編號用例預期輸出覆蓋等價類輸入結果1信息:123單擊按鈕信息123發(fā)送至對方1,2,輸入信息:123單擊按鈕正確2信息:123未單擊按鈕發(fā)送失敗4輸入信息:123未單擊按鈕不正確3信息:空單擊按鈕發(fā)送失敗3輸入信息:空單擊按鈕不正確4信息:空未單擊按鈕發(fā)送失敗3,4輸入信息:空未單擊按鈕不正確5.退出登錄輸入條件編號有效等價類編號無效等價類退出操作1干脆點擊客戶端-退出按鍵,并在出現(xiàn)的提示框,點擊是4無操作2干脆點擊客戶端-退出按鍵,并在出現(xiàn)的提示框,點擊否3干脆點擊主界面的斷開連接5在點擊客戶端-退出按鍵,并在出現(xiàn)的提示框,點擊取消測試用例用例編號用例預期輸出覆蓋等價類輸入結果1點擊客戶端-退出按鍵,并在出現(xiàn)的提示

溫馨提示

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

評論

0/150

提交評論