畢業(yè)設(shè)計(jì)(論文)網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)開發(fā)與設(shè)計(jì)_第1頁
畢業(yè)設(shè)計(jì)(論文)網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)開發(fā)與設(shè)計(jì)_第2頁
畢業(yè)設(shè)計(jì)(論文)網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)開發(fā)與設(shè)計(jì)_第3頁
畢業(yè)設(shè)計(jì)(論文)網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)開發(fā)與設(shè)計(jì)_第4頁
畢業(yè)設(shè)計(jì)(論文)網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)開發(fā)與設(shè)計(jì)_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

PAGE26網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)開發(fā)與設(shè)計(jì)摘要隨著現(xiàn)今計(jì)算機(jī)與英特網(wǎng)的飛速發(fā)展與普及,人與人之間的交流也隨之越來越方便,使用網(wǎng)絡(luò)聊天的人群也越來越大,人們對(duì)網(wǎng)絡(luò)聊天的需求也日益顯著。本文主要提出網(wǎng)絡(luò)實(shí)時(shí)聊天系統(tǒng)的開發(fā)與設(shè)計(jì),是一個(gè)基于VC開發(fā)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)的聊天系統(tǒng)。能實(shí)現(xiàn)基于VC++的網(wǎng)絡(luò)實(shí)時(shí)聊天,本系統(tǒng)具有單獨(dú)的客戶端和服務(wù)器端。服務(wù)器應(yīng)用程序能夠接受來自客戶端的廣播,然后向客戶端發(fā)送本機(jī)的IP與服務(wù)端口號(hào),讓大家能通過客戶端接入到服務(wù)器進(jìn)行聊天。服務(wù)器負(fù)責(zé)接收來自客戶端的聊天信息,然后通過不同的IP發(fā)送給指定的地址,同時(shí)服務(wù)器還可以監(jiān)聽客戶端的登錄與退出。主要使用WindowsSocket編程,建立Client/Server模型,實(shí)現(xiàn)一個(gè)服務(wù)器和多個(gè)客戶端的一對(duì)多模式,各個(gè)客戶端之間實(shí)現(xiàn)相互的通信。關(guān)鍵字:WindowsSocket、Client/Server、套接字、實(shí)時(shí)通信AbstractWiththerapiddevelopmentandpopularizationoftheInternetandthecomputers.Itwillbemoreandmoreconvenientofthecommunicationbetweenus.Theuseofnetworkchatbetweenpeoplealsobegingmoreandmorebig,andpeoplechattingonthenetworkaremoreandmorefrequently.Thispapermainlyputsforwardnetworkreal-timechatsystemdevelopmentanddesign,wasdesignedasadevelopmentplatformbasedonVCdesignandimplementationofthechatsystem.Canrealizereal-timechatbasedonvc++network,thissystemhasasingleclientandserver.Theserverisresponsibleforreceivinginformationfromclientchat,thenthroughdifferentIPsenttothedesignatedaddress,theservercanalsomonitoredclientloginandexit.ThischatsystemmainlyusesWindowsSocketprogramming,andsetupaClient/Servermodelandimplementaserverandmultipleclientone-to-manymodel.SothateachClientrealizemutualcommunicationbetween.

Keywords:WindowsSocket,Client/Server,Socket,real-timecommunication目錄TOC\o"1-3"\h\u21197摘要 I4913Abstract II106目錄 III83891緒論 1281751.1系統(tǒng)現(xiàn)狀 119991.2本系統(tǒng)研究?jī)?nèi)容 2203902系統(tǒng)的開發(fā)環(huán)境與相關(guān)關(guān)鍵技術(shù) 3110202.1開發(fā)環(huán)境 3270152.2相關(guān)關(guān)鍵技術(shù) 3163192.2.1VisualC++與面向?qū)ο蟪绦蛟O(shè)計(jì) 3156312.2.2TCP/IP協(xié)議、UDP協(xié)議 5262192.2.3MFC(MicrososftFundationClasses,即微軟的基本類庫) 6119222.2.4WindowsSocket編程 718492Client/Server結(jié)構(gòu)(客戶機(jī)/服務(wù)器模式) 913203系統(tǒng)需求分析與設(shè)計(jì)開發(fā) 10286983.1系統(tǒng)需求分析 10194153.2系統(tǒng)設(shè)計(jì) 1176413.2.1設(shè)計(jì)原則 1118753.2.2工作流程 11160813.2.3功能設(shè)計(jì) 12177344系統(tǒng)的實(shí)現(xiàn) 14207424.1服務(wù)請(qǐng)求規(guī)范 1478374.1.1服務(wù)器端 14145314.1.2客戶端 1485104.2主要模塊的設(shè)計(jì)分析 14174024.2.1客戶端模塊 1411344.2.2服務(wù)器端類結(jié)構(gòu) 18208774.3系統(tǒng)運(yùn)行效果 19259704.3.1服務(wù)器端效果圖 1910044.3.2客戶端效果圖 20302574.4系統(tǒng)測(cè)試 20250134.4.1測(cè)試意義 2055994.4.2軟件測(cè)試的目標(biāo) 2272194.4.3軟件測(cè)試的方法 2219443總結(jié) 2413037致謝 258193參考文獻(xiàn) 261緒論近年來計(jì)算機(jī)技術(shù)的快速發(fā)展,特別是計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價(jià)格,開發(fā)出更方便、更實(shí)用的網(wǎng)絡(luò)工具。各種在線服務(wù)系統(tǒng),更是深刻的影響了人們的聯(lián)系方式,使得人們可以在遠(yuǎn)隔千里之遙隨時(shí)通訊。網(wǎng)上聊天系統(tǒng)是為人們進(jìn)行交流和聯(lián)系提供的一個(gè)平臺(tái)。利用現(xiàn)代的網(wǎng)絡(luò)資源優(yōu)勢(shì)和技術(shù)優(yōu)勢(shì),通過提供完善的網(wǎng)上聊天系統(tǒng)的管理,以達(dá)到增進(jìn)人與人之間的信息交流和溝通的目的,并以此加快人們的信息化建設(shè)。在市場(chǎng)上,關(guān)于網(wǎng)上聊天室系統(tǒng)開發(fā)的軟件有很多,本系統(tǒng)基于VC開發(fā),通過套接字SOCKET實(shí)現(xiàn),作為今后將從事軟件開發(fā)的學(xué)生,即時(shí)了解和掌握流行的即時(shí)通訊機(jī)制并且應(yīng)用到實(shí)踐過程中,將極大的提高自己的設(shè)計(jì)和開發(fā)軟件的積極性;提升自己的理論和技術(shù)水平,跟蹤國(guó)內(nèi)外最新的技術(shù)和開發(fā)模式,為以后類似的開發(fā)積累經(jīng)驗(yàn);同時(shí),開發(fā)出來的作品也可以真正運(yùn)用到實(shí)際當(dāng)中。網(wǎng)絡(luò)聊天室是當(dāng)今廣泛應(yīng)用的一種網(wǎng)絡(luò)服務(wù),它為廣大網(wǎng)民提供了一種方便快捷的溝通方式,在線聊天是上網(wǎng)的重要活動(dòng)之一。1.1系統(tǒng)現(xiàn)狀文本方式聊天室:基于Web的聊天室有其獨(dú)特的優(yōu)勢(shì)。它不需要安裝專門的軟件,Web瀏覽器就可以使用聊天服務(wù);它集成在Web服務(wù)器中,不需額外的硬件支持,便于廣大中小型客戶建設(shè)和使用。所以,基于Web的聊天室仍然被廣泛采用。但是單純聊天的一般內(nèi)容比較單一,主要局限于角色認(rèn)知過程中職業(yè)、地域、性別等方面的擴(kuò)展,難以實(shí)現(xiàn)“失去他人注視的真實(shí)自我的展現(xiàn)”。

視頻聊天室、語音聊天室、動(dòng)畫聊天室:隨著富媒體技術(shù)的廣泛應(yīng)用,一種結(jié)合文本、語音和人臉動(dòng)畫或視頻的三維語音視頻聊天室在互聯(lián)網(wǎng)上出現(xiàn)。復(fù)合聊天室:典型代表是UC聊天室,它打破了傳統(tǒng)IM軟件主要用于文字通訊的單一模式,將有聲有色、圖文并茂的場(chǎng)景融入聊天模式,加之視頻、可斷點(diǎn)續(xù)傳的文件輸、消息群發(fā)功能和在線游戲功能以及同學(xué)錄(團(tuán)體)等有機(jī)結(jié)合,形成一個(gè)完整的網(wǎng)上即時(shí)通訊娛樂平臺(tái),帶來聊天新感覺。第十六次CNNIC調(diào)查結(jié)果顯示:在網(wǎng)絡(luò)用戶經(jīng)常使用的網(wǎng)絡(luò)服務(wù)/功能調(diào)查中,網(wǎng)上聊天(聊天室、QQ、ICQ等)占被調(diào)查人群的42.6%,處于第四位,作為操作簡(jiǎn)便也是出現(xiàn)最早的網(wǎng)上聊天方式,聊天室聊天又是其中最普及的一種。在網(wǎng)站由窄帶向?qū)拵Оl(fā)展的今天,新一代的聊天室充分利用富媒體技術(shù),以嶄新的形象吸引受眾視聽。1.2本系統(tǒng)研究?jī)?nèi)容本系統(tǒng)主要研究?jī)?nèi)容是基于VC++的網(wǎng)絡(luò)實(shí)時(shí)聊天軟件,主要分為服務(wù)器端和客戶端,本系統(tǒng)研究目標(biāo)是實(shí)現(xiàn)用戶通過登錄客戶端,可以與服務(wù)器端進(jìn)行文字信息的傳遞。主要使用windowssocket編程,建立Client/Server模型,初始化套接字,然后建立一個(gè)監(jiān)聽的套接字,設(shè)定服務(wù)器地址信息,并將監(jiān)聽端口綁定到這個(gè)地址,最后開始監(jiān)聽,并且接收客戶端的鏈接以及與客戶端進(jìn)行信息的傳遞。主要需要進(jìn)行一下的準(zhǔn)備工作與學(xué)習(xí):了解本系統(tǒng)的特點(diǎn)以及所需要實(shí)現(xiàn)的功能;對(duì)本系統(tǒng)開發(fā)所需要的軟件環(huán)境要有所了解和掌握基本編程能力,如:VisualC++6.0、VC++、MFC等。大量查閱相關(guān)資料,對(duì)本系統(tǒng)的研究有一個(gè)清晰的思路,了解相關(guān)具體技術(shù),做好前期的準(zhǔn)備工作。1.3研究方法與技術(shù)路線首先根據(jù)設(shè)計(jì)要求查詢相關(guān)技術(shù)資料,充分了解本聊天軟件的具體特點(diǎn)、各部分的組成等,查閱資料掌握如何利用協(xié)議分析工具分析IP數(shù)據(jù)報(bào)報(bào)文格式,體會(huì)數(shù)據(jù)報(bào)發(fā)送、轉(zhuǎn)發(fā)的過程。其次,通過分析截獲TCP報(bào)文首部信息,理解首部中的序號(hào)、確認(rèn)號(hào)等字段是TCP可靠連接的基礎(chǔ)。并通過分析TCP連接的三次握手建立和釋放過程,理解TCP連接建立和釋放機(jī)制。還要深入研究開發(fā)本系統(tǒng)所需要的相關(guān)理論知識(shí)和實(shí)際操作技術(shù),通過需求分析確定本課題的總體設(shè)計(jì)方案。對(duì)比并確定所需要的軟件開發(fā)工具,深入學(xué)習(xí)相關(guān)軟件的使用和相應(yīng)的編程技巧。最終確定采用SQL數(shù)據(jù)庫訪問技術(shù)和socket套接字實(shí)現(xiàn)系統(tǒng)軟件的開發(fā)。對(duì)以上研究資料進(jìn)行認(rèn)真的整理并進(jìn)行詳細(xì)編寫,完成論文的撰寫工作。2系統(tǒng)的開發(fā)環(huán)境與相關(guān)關(guān)鍵技術(shù)2.1開發(fā)環(huán)境本系統(tǒng)是一個(gè)面向中小型企業(yè)內(nèi)部使用的聊天軟件,開發(fā)過程中必須選擇合適的硬件和軟件,應(yīng)該具有完備的開發(fā)設(shè)備,性能穩(wěn)定的開發(fā)機(jī)器,操作系統(tǒng)的選擇要比較適當(dāng),如Windows2000/WindowsXP/Windows2003,開發(fā)平臺(tái)要求MicrosoftVisualC++6.0,使用開發(fā)語言為C++。2.2相關(guān)關(guān)鍵技術(shù)VisualC++與面向?qū)ο蟪绦蛟O(shè)計(jì)面向?qū)ο缶幊蹋∣bjectOrientedProgramming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。面向?qū)ο蟪绦蛟O(shè)計(jì)中的概念主要包括:對(duì)象、類、數(shù)據(jù)抽象、繼承、動(dòng)態(tài)綁定、數(shù)據(jù)封裝、多態(tài)性、消息傳遞。通過這些概念面向?qū)ο蟮乃枷氲玫搅司唧w的體現(xiàn)。1)對(duì)象:對(duì)象是運(yùn)行期的基本實(shí)體,它是一個(gè)封裝了數(shù)據(jù)和操作這些數(shù)據(jù)的代碼的邏輯實(shí)體。類:類是具有相同類型的對(duì)象的抽象。一個(gè)對(duì)象所包含的所有數(shù)據(jù)和代碼可以通過類來構(gòu)造。封裝:封裝是將數(shù)據(jù)和代碼捆綁到一起,避免了外界的干擾和不確定性。對(duì)象的某些數(shù)據(jù)和代碼可以是私有的,不能被外界訪問,以此實(shí)現(xiàn)對(duì)數(shù)據(jù)和代碼不同級(jí)別的訪問權(quán)限。繼承:繼承是讓某個(gè)類型的對(duì)象獲得另一個(gè)類型的對(duì)象的特征。通過繼承可以實(shí)現(xiàn)代碼的重用:從已存在的類派生出的一個(gè)新類將自動(dòng)具有原來那個(gè)類的特性,同時(shí),它還可以擁有自己的新特性。多態(tài):多態(tài)是指不同事物具有不同表現(xiàn)形式的能力。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口,通過這種方式減少代碼的復(fù)雜度。動(dòng)態(tài)綁定:綁定指的是將一個(gè)過程調(diào)用與相應(yīng)代碼鏈接起來的行為。動(dòng)態(tài)綁定是指與給定的過程調(diào)用相關(guān)聯(lián)的代碼只有在運(yùn)行期才可知的一種綁定,它是多態(tài)實(shí)現(xiàn)的具體形式。消息傳遞:對(duì)象之間需要相互溝通,溝通的途徑就是對(duì)象之間收發(fā)信息。消息內(nèi)容包括接收消息的對(duì)象的標(biāo)識(shí),需要調(diào)用的函數(shù)的標(biāo)識(shí),以及必要的信息。消息傳遞的概念使得對(duì)現(xiàn)實(shí)世界的描述更容易。方法:方法(Method)是定義一個(gè)類可以做的,但不一定會(huì)去做的事。面向?qū)ο笾饕卣鳎悍庋b性:封裝是一種信息隱蔽技術(shù),它體現(xiàn)于類的說明,是對(duì)象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))封裝為一個(gè)整體,以實(shí)現(xiàn)獨(dú)立性很強(qiáng)的模塊,使得用戶只能見到對(duì)象的外特性(對(duì)象能接受哪些消息,具有那些處理能力),而對(duì)象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和實(shí)現(xiàn)加工能力的算法)對(duì)用戶是隱蔽的。封裝的目的在于把對(duì)象的設(shè)計(jì)者和對(duì)象者的使用分開,使用者不必知曉行為實(shí)現(xiàn)的細(xì)節(jié),只須用設(shè)計(jì)者提供的消息來訪問該對(duì)象。繼承性:繼承性是子類自動(dòng)共享父類之間數(shù)據(jù)和方法的機(jī)制。它由類的派生功能體現(xiàn)。一個(gè)類直接繼承其它類的全部描述,同時(shí)可修改和擴(kuò)充。繼承具有傳遞性。繼承分為單繼承(一個(gè)子類只有一父類)和多重繼承(一個(gè)類有多個(gè)父類)。類的對(duì)象是各自封閉的,如果沒繼承性機(jī)制,則類對(duì)象中數(shù)據(jù)、方法就會(huì)出現(xiàn)大量重復(fù)。繼承不僅支持系統(tǒng)的可重用性,而且還促進(jìn)系統(tǒng)的可擴(kuò)充性。多態(tài)性:對(duì)象根據(jù)所接收的消息而做出動(dòng)作。同一消息為不同的對(duì)象接受時(shí)可產(chǎn)生完全不同的行動(dòng),這種現(xiàn)象稱為多態(tài)性。利用多態(tài)性用戶可發(fā)送一個(gè)通用的信息,而將所有的實(shí)現(xiàn)細(xì)節(jié)都留給接受消息的對(duì)象自行決定,如是,同一消息即可調(diào)用不同的方法。例如:Print消息被發(fā)送給一圖或表時(shí)調(diào)用的打印方法與將同樣的Print消息發(fā)送給一正文文件而調(diào)用的打印方法會(huì)完全不同。多態(tài)性的實(shí)現(xiàn)受到繼承性的支持,利用類繼承的層次關(guān)系,把具有通用功能的協(xié)議存放在類層次中盡可能高的地方,而將實(shí)現(xiàn)這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對(duì)象就能給通用消息以不同的響應(yīng)。在OOPL中可通過在派生類中重定義基類函數(shù)(定義為重載函數(shù)或虛函數(shù))來實(shí)現(xiàn)多態(tài)性。TCP/IP協(xié)議、UDP協(xié)議TCP/IP(TransmissionControlProtocol/InternetProtocol)協(xié)議Internet最基本的協(xié)議,是互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。TCP/IP協(xié)議像其他網(wǎng)絡(luò)協(xié)議一樣,也是按層次劃分的,第一層都有各自功能。TCP/IP協(xié)議共分為四層,包括應(yīng)用層(FTP/Email)、傳輸層(TCP/UDP)、網(wǎng)絡(luò)層(IP/ICMP/IGMP)和鏈路層(設(shè)備驅(qū)動(dòng)程序與接口卡)。鏈路層:鏈路層有時(shí)也被稱為數(shù)據(jù)鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口卡。他們一起處理與電纜(或其他任何傳輸媒介)的物理接口細(xì)節(jié)。網(wǎng)絡(luò)層:網(wǎng)絡(luò)層處理分組在網(wǎng)絡(luò)中的活動(dòng),例如分組的選路。在TCP/IP協(xié)議族中,網(wǎng)絡(luò)層協(xié)議包括IP協(xié)議(網(wǎng)際協(xié)議),ICMP協(xié)議(Internet互聯(lián)網(wǎng)控制報(bào)文協(xié)議),以及IGMP協(xié)議(Internet組管理協(xié)議)。傳輸層:傳輸層主要為兩臺(tái)主機(jī)上的應(yīng)用程序提供端到端的通信。在TCP/IP協(xié)議族中,有兩個(gè)互不相同的傳輸協(xié)議:TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。TCP為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應(yīng)用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡(luò)層,確認(rèn)接收到的分組,設(shè)置發(fā)送最后確認(rèn)分組的超時(shí)時(shí)鐘等。由于運(yùn)輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略所有這些細(xì)節(jié)。而另一方面,UDP則為應(yīng)用層提供一種非常簡(jiǎn)單的服務(wù)。它只是把稱作數(shù)據(jù)報(bào)的分組從一臺(tái)主機(jī)發(fā)送到另一臺(tái)主機(jī),但并不保證該數(shù)據(jù)報(bào)能到達(dá)另一端。任何必需的可靠性必須由應(yīng)用層來提供。應(yīng)用層:應(yīng)用層負(fù)責(zé)處理特定應(yīng)用程序的細(xì)節(jié)。【面向連接的(TCP)連接過程】2.MFC(MicrososftFundationClasses,即微軟的基本類庫)MFC是一個(gè)編程框架,MFC(MicrosoftFoundationClassLibrary)中的各種類結(jié)合起來構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立Windows下的應(yīng)用程序,這是一種相對(duì)SDK來說更為簡(jiǎn)單的方法。因?yàn)榭傮w上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。MicrosoftVisualC++提供了相應(yīng)的工具來完成這個(gè)工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口;ClassWizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。為了支持對(duì)應(yīng)用程序概念的封裝,MFC內(nèi)部必須作大量的工作。例如,為了實(shí)現(xiàn)消息映射機(jī)制,MFC編程框架必須要保證首先得到消息,然后按既定的方法進(jìn)行處理。又如,為了實(shí)現(xiàn)對(duì)DLL編程的支持和多線程編程的支持,MFC內(nèi)部使用了特別的處理方法,使用模塊狀態(tài)、線程狀態(tài)等來管理一些重要信息。雖然,這些內(nèi)部處理對(duì)程序員來說是透明的,但是,懂得和理解MFC內(nèi)部機(jī)制有助于寫出功能靈活而強(qiáng)大的程序??傊?,MFC封裝了Win32API,OLEAPI,ODBCAPI等底層函數(shù)的功能,并提供更高一層的接口,簡(jiǎn)化了Windows編程。同時(shí),MFC支持對(duì)底層API的直接調(diào)用。MFC提供了一個(gè)Windows應(yīng)用程序開發(fā)模式,對(duì)程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,預(yù)定義或?qū)崿F(xiàn)了許多事件和消息處理,等等。框架或者由其本身處理事件,不依賴程序員的代碼;或者調(diào)用程序員的代碼來處理應(yīng)用程序特定的事件。MFC是C++類庫,程序員就是通過使用、繼承和擴(kuò)展適當(dāng)?shù)念悂韺?shí)現(xiàn)特定的目的。例如,繼承時(shí),應(yīng)用程序特定的事件由程序員的派生類來處理,不感興趣的由基類處理。實(shí)現(xiàn)這種功能的基礎(chǔ)是C++對(duì)繼承的支持,對(duì)虛擬函數(shù)的支持,以及MFC實(shí)現(xiàn)的消息映射機(jī)制。WindowsSocket編程Windowssockets無疑是我們進(jìn)行網(wǎng)絡(luò)編程的利器。所有的WindowsSockets實(shí)現(xiàn)都支持流套接口和數(shù)據(jù)報(bào)套接口。應(yīng)用程序調(diào)用WindowsSockets的API實(shí)現(xiàn)相互之間的通訊。Socket接口是網(wǎng)絡(luò)編程(通常是TCP/IP協(xié)議,也可以是其他協(xié)議)的API。最早的Socket接口是Berkeley接口,在Unxi操作系統(tǒng)中實(shí)現(xiàn)。WinSock也是一個(gè)基于Socket模型的API,在MicrosoftWindows操作系統(tǒng)類中使用。它在Berkeley接口函數(shù)的基礎(chǔ)之上,還增加了基于消息驅(qū)動(dòng)機(jī)制的Windows擴(kuò)展函數(shù)。Winscok1.1只支持TCP/IP網(wǎng)絡(luò),WinSock2.0增加了對(duì)更多協(xié)議的支持。這里,討論TCP/IP網(wǎng)絡(luò)上的API。Socket接口包括三類函數(shù):第一類是WinSockAPI包含的Berkeleysocket函數(shù)。這類函數(shù)分兩部分。第一部分是用于網(wǎng)絡(luò)I/O的函數(shù),如accept、Closesocket、connect、recv、recvfrom、Select、Send、Sendto。另一部分是不涉及網(wǎng)絡(luò)I/O、在本地端完成的函數(shù),如bind、getpeername、getsockname、getsocketopt、htonl、htons、inet_addr、inet_nton、ioctlsocket、listen、ntohl、ntohs、setsocketopt、shutdow、socket等。第二類是檢索有關(guān)域名、通信服務(wù)和協(xié)議等Internet信息的數(shù)據(jù)庫函數(shù),如gethostbyaddr、gethostbyname、gethostname、getprotolbyname、getprotolbynumber、getserverbyname、getservbyport。第三類是Berkekleysocket例程的Windows專用的擴(kuò)展函數(shù),如gethostbyname對(duì)應(yīng)的WSAAsynGetHostByName(其他數(shù)據(jù)庫函數(shù)除了gethostname都有異步版本),select對(duì)應(yīng)的WSAAsynSelect,判斷是否阻塞的函數(shù)WSAIsBlocking,得到上一次WindsockAPI錯(cuò)誤信息的WSAGetLastError,等等。從另外一個(gè)角度,這些函數(shù)又可以分為兩類,一是阻塞函數(shù),一是非阻塞函數(shù)。所謂阻塞函數(shù),是指其完成指定的任務(wù)之前不允許程序調(diào)用另一個(gè)函數(shù),在Windows下還會(huì)阻塞本線程消息的發(fā)送。所謂非阻塞函數(shù),是指操作啟動(dòng)之后,如果可以立即得到結(jié)果就返回結(jié)果,否則返回表示結(jié)果需要等待的錯(cuò)誤信息,不等待任務(wù)完成函數(shù)就返回。首先,異步函數(shù)是非阻塞函數(shù);其次,獲取遠(yuǎn)地信息的數(shù)據(jù)庫函數(shù)是阻塞函數(shù)(因此,WinSock提供了其異步版本);在Berkeleysocket函數(shù)部分中,不涉及網(wǎng)絡(luò)I/O、本地端工作的函數(shù)是非阻塞函數(shù);在Berkeleysocket函數(shù)部分中,網(wǎng)絡(luò)I/O的函數(shù)是可阻塞函數(shù),也就是它們可以阻塞執(zhí)行,也可以不阻塞執(zhí)行。這些函數(shù)都使用了一個(gè)socket,如果它們使用的socket是阻塞的,則這些函數(shù)是阻塞函數(shù);如果它們使用的socket是非阻塞的,則這些函數(shù)是非阻塞函數(shù)。WindowsSockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實(shí)現(xiàn)實(shí)際的通訊工作。它們之間的關(guān)系如下圖所示:應(yīng)用程序一應(yīng)用程序二網(wǎng)絡(luò)編程界面,例如WindowsSocket等應(yīng)用程序一應(yīng)用程序二網(wǎng)絡(luò)編程界面,例如WindowsSocket等網(wǎng)絡(luò)通訊協(xié)議服務(wù)界面,例如TCP/IP操作系統(tǒng),例如Windows物理通訊介質(zhì)【W(wǎng)indowsSockets實(shí)現(xiàn)通訊工作的各層關(guān)系圖】Client/Server結(jié)構(gòu)(客戶機(jī)/服務(wù)器模式)Client/Server結(jié)構(gòu)(C/S結(jié)構(gòu))即客戶機(jī)和服務(wù)器結(jié)構(gòu)。C/S又稱Client/Server或客戶/服務(wù)器模式。服務(wù)器通常采用高性能的PC、工作站或小型機(jī),并采用大型數(shù)據(jù)庫系統(tǒng),如ng/wiki/ORACLE"ORACLE、SYBASE、informix或SQLServer。客戶端需要安裝專用的客戶端軟件。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的Web應(yīng)用發(fā)展,Web和Client/Server應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè):只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專門的設(shè)計(jì)來處理分布式的數(shù)據(jù)。3系統(tǒng)需求分析與設(shè)計(jì)開發(fā)3.1系統(tǒng)需求分析在基于Socket的聊天系統(tǒng),客戶端和服務(wù)器必須保持隨時(shí)隨地的連接。這有別于普通Web瀏覽的連接方式。在使用瀏覽器訪問服務(wù)器時(shí),先由客戶端發(fā)出協(xié)議,然后服務(wù)器響應(yīng)處理這個(gè)客戶端的響應(yīng),再返回處理結(jié)果;請(qǐng)求(Request)和響應(yīng)(Response)是一種一對(duì)一的前后因果關(guān)系。而在基于Socket的聊天系統(tǒng)中,客戶端發(fā)出聊天信息的同時(shí),客戶端也在接受服務(wù)器發(fā)送過來的其他人的聊天信息,因此,請(qǐng)求和響應(yīng)不存在那種前后對(duì)應(yīng)關(guān)系,是兩種分別獨(dú)立進(jìn)行的進(jìn)程。因?yàn)榉?wù)器任何時(shí)候都可能發(fā)送信息到客戶端,因此,客戶端和服務(wù)器一旦建立連接,必須能讓服務(wù)器在以后發(fā)送中尋找定位到這個(gè)連接。聊天系統(tǒng)在客戶端和服務(wù)器之間主要傳送的是文字信息,服務(wù)器端只需要把最近的文字信息推送到客戶端,這樣減少了網(wǎng)絡(luò)傳輸內(nèi)容,節(jié)省了網(wǎng)絡(luò)傳輸?shù)臅r(shí)間,無疑提高了聊天速度。這種“推”技術(shù)是目前基于Socket聊天系統(tǒng)的主要實(shí)現(xiàn)技術(shù)。該聊天程序分為服務(wù)器端和課戶端兩個(gè)部分。他們之間的關(guān)系圖如下:ClientServerClientClientClient更新成員列表成員列表請(qǐng)求應(yīng)答發(fā)送消息ClientServerClientClientClient更新成員列表成員列表請(qǐng)求應(yīng)答發(fā)送消息3.2系統(tǒng)設(shè)計(jì)3.設(shè)計(jì)原則考慮到系統(tǒng)的可重用性和伸縮性,需要將本系統(tǒng)的網(wǎng)絡(luò)通信底層和應(yīng)用系統(tǒng)分離開。這樣,基于可重用的網(wǎng)絡(luò)通信層,可以實(shí)現(xiàn)其他各種實(shí)時(shí)性較高的應(yīng)用系統(tǒng)。本系統(tǒng)在架構(gòu)設(shè)計(jì)上將分4個(gè)層次,如下圖所示。CAsyncSocketCAsyncSocketCSocket聊天、游戲等應(yīng)用系統(tǒng)WindowSocketsAPI【架構(gòu)層次】本系統(tǒng)最底層是Socket通信層,將負(fù)責(zé)客戶端和服務(wù)器之間快速的數(shù)據(jù)交換,它通過接口層和最上面應(yīng)用層保持實(shí)時(shí)數(shù)據(jù)聯(lián)系。用戶從客戶端進(jìn)入到本系統(tǒng)前,將實(shí)現(xiàn)統(tǒng)一的用戶登錄驗(yàn)證機(jī)制。Socket底層設(shè)計(jì)分兩大部分:協(xié)議設(shè)計(jì)和連接處理設(shè)計(jì):協(xié)議設(shè)計(jì)和連接處理設(shè)計(jì);CSocket層的目的是提供底層和應(yīng)用蹭一個(gè)中介媒體的作用,但是不能設(shè)計(jì)得太復(fù)雜,以免延誤數(shù)據(jù)傳送時(shí)間。3.2.2工作流程只有充分地了解了聊天程序的工作流程,才能對(duì)整個(gè)系統(tǒng)的理解更加深刻,聊天程序的工作流程如下圖所示。加載套接字庫加載套接字庫初始化套接字綁定本地機(jī)到套接字向指定IP地址發(fā)送數(shù)據(jù)關(guān)閉套接字庫結(jié)束聊天創(chuàng)建線程用于接受數(shù)據(jù)【聊天程序的工作流程】功能設(shè)計(jì)局域網(wǎng)聊天系統(tǒng)以局域網(wǎng)內(nèi)的用戶為應(yīng)用對(duì)象,經(jīng)過各方面需求分析,該系統(tǒng)主要由服務(wù)器端和客戶端兩部分構(gòu)成,各功能模塊如下圖所示。局域網(wǎng)聊天系統(tǒng)局域網(wǎng)聊天系統(tǒng)服務(wù)器客戶端開啟服務(wù)器停止服務(wù)器配置服務(wù)器關(guān)閉服務(wù)器發(fā)送離線信息登陸文字傳送接收離線信息用戶管理【局域網(wǎng)聊天系統(tǒng)功能模塊圖】4系統(tǒng)的實(shí)現(xiàn)4.1服務(wù)請(qǐng)求規(guī)范服務(wù)器端(1)創(chuàng)建一個(gè)UDP的套接字,接受來自客戶端的廣播請(qǐng)求,當(dāng)請(qǐng)求報(bào)文內(nèi)容為“REQUESTFORIPADDRESSANDSERVERPORT”時(shí),接受請(qǐng)求,給客戶端發(fā)送本服務(wù)器TCP聊天室的端口號(hào)。(2)創(chuàng)建一個(gè)主要的TCP協(xié)議的套接字負(fù)責(zé)客戶端TCP連接,處理它的連接請(qǐng)求事件。(3)在主要的TCP連接協(xié)議的套接字里面再創(chuàng)建TCP套接字保存到動(dòng)態(tài)數(shù)組里,在主要的套接字接受請(qǐng)求后,就用這些套接字和客戶端發(fā)送和接受數(shù)據(jù)??蛻舳耍?)當(dāng)用戶按“連接”按鈕時(shí),創(chuàng)建UDP協(xié)議套接字,給本地計(jì)算機(jī)發(fā)廣播,廣播內(nèi)容為“REQUESTFORIPADDRESSANDSERVERPORT”。(2)當(dāng)收到服務(wù)器端的回應(yīng),收到服務(wù)器發(fā)來的端口號(hào)后,關(guān)閉UDP連接。根據(jù)服務(wù)器的IP地址和端口號(hào)重新創(chuàng)建TCP連接。故我思考:客戶端一定要知道服務(wù)器的一個(gè)端口,我假設(shè)它知道服務(wù)器UDP服務(wù)的端口,通過發(fā)廣播給服務(wù)器的UDP服務(wù)套接字,然后等待該套接字發(fā)回服務(wù)器TCP聊天室服務(wù)的端口號(hào),IP地址用RECEIVEFROM也可以得到。4.2主要模塊的設(shè)計(jì)分析客戶端模塊類模塊如下:主要函數(shù)說明: ClassClientSocket:PublicCSocket BOOLCheckUserName(CStringstrUserName); //檢查用戶名是否重復(fù) voidCutMessage(CStringstrText); //把消息分離開處理 voidDelOnlineUser(CStringstrUserName); //刪除一個(gè)在線用戶 voidAddChatContent(CStringstrText); //往內(nèi)容框添加記錄 voidAddOnlineUser(CStringstrUserName); //增加一個(gè)用戶 voidHandleMsg(CStringstrMsg); //根據(jù)標(biāo)志位進(jìn)行消息處理 CWnd*m_pChatDlg; //指向窗口的指針,用于輸出 voidSendUserName(); //TCP;連接后第一次發(fā)送用戶名 voidSendToOne(CStringstrText); //把指定字符串發(fā)送給一個(gè)人("悄悄話”) voidSendToAll(CStringstrText); //把制定字符串發(fā)送給所有在想用戶 voidGetUserName(); //從對(duì)話框獲得用戶名 BOOLCreateTCPSocket(); //創(chuàng)建TCP套接字并連接 BOOLCreateUDPSocket(); /創(chuàng)建UDP套接字并發(fā)廣播客戶端的數(shù)據(jù)處理模塊://消息處理函數(shù)//通信格式約定如下:/********************************/* (0)用戶名與服務(wù)器上的重復(fù)*//* STX+0+用戶名+ETX *//* (?。┦状蝹鬏斣诰€用戶名 *//* STX+1+用戶名+ETX *//* (ⅱ)傳輸新到用戶名 *//* STX+2+用戶名+ETX *//* (ⅲ)傳輸離線用戶名 *//* STX+3+用戶名+ETX *//* (ⅳ)傳輸聊天數(shù)據(jù) *//* STX+4+內(nèi)容+ETX *//********************************/voidCClientSocket::HandleMsg(CStringstrMsg){ CStringstrTmp; switch(strMsg.GetAt(1)) { case'0'://用戶名已存在 strMsg=strMsg.Mid(2,strMsg.GetLength()-3);//刪掉頭尾控制位 strMsg+="用戶名已存在,請(qǐng)嘗試用另外的用戶名登陸!\r\n"+GetTime(); AddChatContent(strMsg);//用戶名已存在 GetUserName();//重新獲取用戶名 SendUserName();//重新發(fā)送用戶名 break; case'1'://首次傳輸在線用戶名 strMsg=strMsg.Mid(2,strMsg.GetLength()-3); AddOnlineUser(strMsg);//用戶名增加到在線列表框 break; case'2'://傳輸新到用戶名 strMsg=strMsg.Mid(2,strMsg.GetLength()-3); AddOnlineUser(strMsg);//增加到在線列表框 strTmp=strMsg+"\t來了。。。\t"+GetTime(); AddChatContent(strTmp);//新用戶名加入聊天內(nèi)容 break; case'3'://傳輸離開用戶名 strMsg=strMsg.Mid(2,strMsg.GetLength()-3); DelOnlineUser(strMsg);//在線列表刪除相應(yīng)用戶名 strTmp=strMsg+"\t離開了。。。\t"+GetTime(); AddChatContent(strTmp);//聊天內(nèi)容顯示用戶離開 break; case'4'://傳輸聊天內(nèi)容,直接顯示 strTmp=strMsg.Mid(2,strMsg.GetLength()-3); strTmp+=GetTime(); //消息末尾加上時(shí)間,直接顯示 AddChatContent(strTmp); break; }}服務(wù)器端類結(jié)構(gòu)主要類:CChatServerDlg,負(fù)責(zé)響應(yīng)窗口輸入輸出CServerSocket,服務(wù)器的主服務(wù)套接字類型,負(fù)責(zé)監(jiān)聽客戶端的TCP連接請(qǐng)求,并控制整個(gè)聊天室的總體數(shù)據(jù)接收與發(fā)送CClientSocket,它的對(duì)象定義在CServerSocket里,定義為動(dòng)態(tài)數(shù)組對(duì)象,負(fù)責(zé)主服務(wù)套接字Accept后,由它來和客戶端通信。CUDPSocket,一直開啟,負(fù)責(zé)客戶端一開的UDP連接請(qǐng)求,給客戶端發(fā)送服務(wù)的端口號(hào)。CPortInput,輸入端口號(hào)對(duì)話框。4.3系統(tǒng)運(yùn)行效果服務(wù)器端效果圖【服務(wù)器端效果圖】客戶端效果圖【客戶端效果圖】4.4系統(tǒng)測(cè)試測(cè)試意義本章對(duì)我們的系統(tǒng)做具體的測(cè)試,驗(yàn)證系統(tǒng)的功能是否得以實(shí)現(xiàn)?!痉?wù)器端代碼測(cè)試】【客戶端代碼測(cè)試】軟件測(cè)試的目標(biāo)(1)測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行的程序的過程;(2)好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案;(3)成功的測(cè)試時(shí)發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。從上述規(guī)則可以看出,測(cè)試的正確定義是“為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程”。正確認(rèn)識(shí)測(cè)試是非常重要的,測(cè)試目標(biāo)決定了測(cè)試方案的設(shè)計(jì)。沒有發(fā)現(xiàn)錯(cuò)誤的測(cè)試也是有價(jià)值的,完整的測(cè)試是評(píng)定測(cè)試質(zhì)量的一種方法。軟件測(cè)試的方法軟件的測(cè)試分為兩種:黑盒測(cè)試和白盒測(cè)試。黑盒測(cè)試:黑盒測(cè)試也稱功能測(cè)試,它是通過測(cè)試來檢測(cè)每個(gè)功能是否都能正常使用。在測(cè)試地,把程序看作一個(gè)不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序接口進(jìn)行測(cè)試。它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息。黑盒測(cè)試著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu),主要針對(duì)軟件界面和軟件功能進(jìn)行測(cè)試。白盒測(cè)試:軟件的白盒測(cè)試是對(duì)軟件的過程性細(xì)節(jié)做細(xì)致的檢查。這種方法是把測(cè)試對(duì)象看做一個(gè)打開的盒子,它允許測(cè)試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計(jì)或選擇測(cè)試用例,對(duì)程序所有邏輯路徑進(jìn)行測(cè)試。通過在不同點(diǎn)檢查程序狀態(tài),確定實(shí)際狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試。白盒測(cè)試主要是想對(duì)程序模塊進(jìn)行如下檢查:1、對(duì)程序模塊的所有獨(dú)立的執(zhí)行路徑至少測(cè)試一遍。2、對(duì)所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測(cè)一遍。3、在循環(huán)的邊界和運(yùn)行的界限內(nèi)執(zhí)行循環(huán)體。4、測(cè)試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等等。測(cè)試用例如下表:功能描述用戶登錄用例目的測(cè)試用戶登錄功能是否正常前提條件客戶端程序和服務(wù)器端程序處于運(yùn)行狀態(tài)輸入/動(dòng)作期望的輸出/相應(yīng)實(shí)際情況示例1:輸入正確的用戶名、服務(wù)器IP和端口號(hào)用戶成功登陸,關(guān)閉登陸窗體,彈出客戶端主界面與期望輸出相同示例2:不輸入用戶名、輸入服務(wù)器IP和端口號(hào)無法登陸服務(wù)器與期望輸出相同示例3:輸入正確的用戶名,輸入錯(cuò)誤服務(wù)器IP和端口

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論