版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、網(wǎng)絡(luò)實時聊天系統(tǒng)開發(fā)與設(shè)計摘要 隨著現(xiàn)今計算機與英特網(wǎng)的飛速發(fā)展與普及,人與人之間的交流也隨之越來越方便,使用網(wǎng)絡(luò)聊天的人群也越來越大,人們對網(wǎng)絡(luò)聊天的需求也日益顯著。 本文主要提出網(wǎng)絡(luò)實時聊天系統(tǒng)的開發(fā)與設(shè)計,是一個基于vc開發(fā)平臺設(shè)計與實現(xiàn)的聊天系統(tǒng)。能實現(xiàn)基于vc+的網(wǎng)絡(luò)實時聊天,本系統(tǒng)具有單獨的客戶端和服務(wù)器端。服務(wù)器應(yīng)用程序能夠接受來自客戶端的廣播,然后向客戶端發(fā)送本機的ip與服務(wù)端口號,讓大家能通過客戶端接入到服務(wù)器進行聊天。服務(wù)器負(fù)責(zé)接收來自客戶端的聊天信息,然后通過不同的ip發(fā)送給指定的地址,同時服務(wù)器還可以監(jiān)聽客戶端的登錄與退出。主要使用windows socket編程,建立
2、client/server模型,實現(xiàn)一個服務(wù)器和多個客戶端的一對多模式,各個客戶端之間實現(xiàn)相互的通信。關(guān)鍵字:windows socket、client/server、套接字、實時通信abstract with the rapid development and popularization of the internet and the computers.it will be more and more convenient of the communication between us .the use of network chat between people also beging
3、 more and more big, and people chatting on the network are more and more frequently.this paper mainly puts forward network real-time chat system development and design, was designed as a development platform based on vc design and implementation of the chat system.can realize real-time chat based on
4、 vc + + network, this system has a single client and server. the server is responsible for receiving information from client chat, then through different ip sent to the designated address, the server can also monitored client login and exit. this chat system mainly uses windows socket programming,an
5、d set up a client / server model and implement a server and multiple client one-to-many model.so that each client realize mutual communication between. keywords: windows socket, client / server, socket, real-time communication目錄摘要iabstractii目錄iii1 緒論11.1 系統(tǒng)現(xiàn)狀11.2 本系統(tǒng)研究內(nèi)容22 系統(tǒng)的開發(fā)環(huán)境與相關(guān)關(guān)鍵技術(shù)32.1 開發(fā)環(huán)境32.
6、2 相關(guān)關(guān)鍵技術(shù)32.2.1 visual c+與面向?qū)ο蟪绦蛟O(shè)計32.2.2 tcp/ip協(xié)議、udp協(xié)議52.2.3 m f c(micrososft fundation classes,即微軟的基本類庫)62.2.4 windows socket 編程72.2.5 client/server結(jié)構(gòu)(客戶機/服務(wù)器模式)93 系統(tǒng)需求分析與設(shè)計開發(fā)103.1 系統(tǒng)需求分析103.2 系統(tǒng)設(shè)計113.2.1 設(shè)計原則113.2.2 工作流程113.2.3 功能設(shè)計124 系統(tǒng)的實現(xiàn)144.1 服務(wù)請求規(guī)范144.1.1 服務(wù)器端144.1.2 客戶端144.2 主要模塊的設(shè)計分析144.2.1
7、 客戶端模塊144.2.2 服務(wù)器端類結(jié)構(gòu)184.3 系統(tǒng)運行效果194.3.1 服務(wù)器端效果圖194.3.2 客戶端效果圖204.4 系統(tǒng)測試204.4.1 測試意義204.4.2 軟件測試的目標(biāo)224.4.3 軟件測試的方法22總結(jié)24致謝25參考文獻26261 緒論近年來計算機技術(shù)的快速發(fā)展,特別是計算機網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價格,開發(fā)出更方便、更實用的網(wǎng)絡(luò)工具。各種在線服務(wù)系統(tǒng),更是深刻的影響了人們的聯(lián)系方式,使得人們可以在遠(yuǎn)隔千里之遙隨時通訊。網(wǎng)上聊天系統(tǒng)是為人們進行交流和聯(lián)系提供的一個平臺。利用現(xiàn)代的網(wǎng)絡(luò)資源優(yōu)勢和技術(shù)優(yōu)勢,通過提供完
8、善的網(wǎng)上聊天系統(tǒng)的管理,以達(dá)到增進人與人之間的信息交流和溝通的目的,并以此加快人們的信息化建設(shè)。在市場上,關(guān)于網(wǎng)上聊天室系統(tǒng)開發(fā)的軟件有很多,本系統(tǒng)基于vc開發(fā),通過套接字socket實現(xiàn),作為今后將從事軟件開發(fā)的學(xué)生,即時了解和掌握流行的即時通訊機制并且應(yīng)用到實踐過程中,將極大的提高自己的設(shè)計和開發(fā)軟件的積極性;提升自己的理論和技術(shù)水平,跟蹤國內(nèi)外最新的技術(shù)和開發(fā)模式,為以后類似的開發(fā)積累經(jīng)驗;同時,開發(fā)出來的作品也可以真正運用到實際當(dāng)中。網(wǎng)絡(luò)聊天室是當(dāng)今廣泛應(yīng)用的一種網(wǎng)絡(luò)服務(wù), 它為廣大網(wǎng)民提供了一種方便快捷的溝通方式, 在線聊天是上網(wǎng)的重要活動之一。1.1 系統(tǒng)現(xiàn)狀文本方式聊天室: 基于
9、web 的聊天室有其獨特的優(yōu)勢。它不需要安裝專門的軟件,web 瀏覽器就可以使用聊天服務(wù);它集成在web 服務(wù)器中,不需額外的硬件支持,便于廣大中小型客戶建設(shè)和使用。所以, 基于web 的聊天室仍然被廣泛采用。但是單純聊天的一般內(nèi)容比較單一,主要局限于角色認(rèn)知過程中職業(yè)、地域、性別等方面的擴展,難以實現(xiàn)“ 失去他人注視的真實自我的展現(xiàn)”。 視頻聊天室、語音聊天室、動畫聊天室: 隨著富媒體技術(shù)的廣泛應(yīng)用, 一種結(jié)合文本、語音和人臉動畫或視頻的三維語音視頻聊天室在互聯(lián)網(wǎng)上出現(xiàn)。復(fù)合聊天室: 典型代表是uc 聊天室, 它打破了傳統(tǒng)im軟件主要用于文字通訊的單一模式, 將有聲有色、圖文并茂的場景融入聊
10、天模式, 加之視頻電話、可斷點續(xù)傳的文件輸、消息群發(fā)功能和在線游戲功能以及同學(xué)錄( 團體) 等有機結(jié)合, 形成一個完整的網(wǎng)上即時通訊娛樂平臺, 帶來聊天新感覺。第十六次cnnic 調(diào)查結(jié)果顯示: 在網(wǎng)絡(luò)用戶經(jīng)常使用的網(wǎng)絡(luò)服務(wù)/功能調(diào)查中, 網(wǎng)上聊天( 聊天室、qq、icq 等)占被調(diào)查人群的42.6%, 處于第四位, 作為操作簡便也是出現(xiàn)最早的網(wǎng)上聊天方式, 聊天室聊天又是其中最普及的一種。在網(wǎng)站由窄帶向?qū)拵Оl(fā)展的今天, 新一代的聊天室充分利用富媒體技術(shù), 以嶄新的形象吸引受眾視聽。1.2 本系統(tǒng)研究內(nèi)容 本系統(tǒng)主要研究內(nèi)容是基于vc+的網(wǎng)絡(luò)實時聊天軟件,主要分為服務(wù)器端和客戶端,本系統(tǒng)研究目
11、標(biāo)是實現(xiàn)用戶通過登錄客戶端,可以與服務(wù)器端進行文字信息的傳遞。主要使用windows socket編程,建立client/server模型,初始化套接字,然后建立一個監(jiān)聽的套接字,設(shè)定服務(wù)器地址信息,并將監(jiān)聽端口綁定到這個地址,最后開始監(jiān)聽,并且接收客戶端的鏈接以及與客戶端進行信息的傳遞。主要需要進行一下的準(zhǔn)備工作與學(xué)習(xí):1、 了解本系統(tǒng)的特點以及所需要實現(xiàn)的功能;2、 對本系統(tǒng)開發(fā)所需要的軟件環(huán)境要有所了解和掌握基本編程能力,如:visual c+ 6.0 、vc+、mfc等。3、 大量查閱相關(guān)資料,對本系統(tǒng)的研究有一個清晰的思路,了解相關(guān)具體技術(shù),做好前期的準(zhǔn)備工作。1.3 研究方法與技術(shù)
12、路線 首先根據(jù)設(shè)計要求查詢相關(guān)技術(shù)資料,充分了解本聊天軟件的具體特點、各部分的組成等,查閱資料掌握如何利用協(xié)議分析工具分析ip數(shù)據(jù)報報文格式,體會數(shù)據(jù)報發(fā)送、轉(zhuǎn)發(fā)的過程。其次,通過分析截獲tcp報文首部信息,理解首部中的序號、確認(rèn)號等字段是tcp可靠連接的基礎(chǔ)。并通過分析tcp連接的三次握手建立和釋放過程,理解tcp連接建立和釋放機制。還要深入研究開發(fā)本系統(tǒng)所需要的相關(guān)理論知識和實際操作技術(shù),通過需求分析確定本課題的總體設(shè)計方案。對比并確定所需要的軟件開發(fā)工具,深入學(xué)習(xí)相關(guān)軟件的使用和相應(yīng)的編程技巧。最終確定采用sql數(shù)據(jù)庫訪問技術(shù)和socket套接字實現(xiàn)系統(tǒng)軟件的開發(fā)。對以上研究資料進行認(rèn)真
13、的整理并進行詳細(xì)編寫,完成論文的撰寫工作。2 系統(tǒng)的開發(fā)環(huán)境與相關(guān)關(guān)鍵技術(shù)2.1 開發(fā)環(huán)境本系統(tǒng)是一個面向中小型企業(yè)內(nèi)部使用的聊天軟件,開發(fā)過程中必須選擇合適的硬件和軟件,應(yīng)該具有完備的開發(fā)設(shè)備,性能穩(wěn)定的開發(fā)機器,操作系統(tǒng)的選擇要比較適當(dāng),如windows 2000 /windows xp /windows2003,開發(fā)平臺要求microsoft visual c+ 6.0,使用開發(fā)語言為c+。2.2 相關(guān)關(guān)鍵技術(shù)2.2.1 visual c+與面向?qū)ο蟪绦蛟O(shè)計面向?qū)ο缶幊蹋╫bject oriented programming,oop,面向?qū)ο蟪绦蛟O(shè)計)是一種計算機編程架構(gòu)。oop 的一條
14、基本原則是計算機程序是由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成。oop 達(dá)到了軟件工程的三個主要目標(biāo):重用性、靈活性和擴展性。為了實現(xiàn)整體運算,每個對象都能夠接收信息、處理數(shù)據(jù)和向其它對象發(fā)送信息。面向?qū)ο蟪绦蛟O(shè)計中的概念主要包括:對象、類、數(shù)據(jù)抽象、繼承、動態(tài)綁定、數(shù)據(jù)封裝、多態(tài)性、消息傳遞。通過這些概念面向?qū)ο蟮乃枷氲玫搅司唧w的體現(xiàn)。 1)對象:對象是運行期的基本實體,它是一個封裝了數(shù)據(jù)和操作這些數(shù)據(jù)的代碼的邏輯實體。 2) 類:類是具有相同類型的對象的抽象。一個對象所包含的所有數(shù)據(jù)和代碼可以通過類來構(gòu)造。 3) 封裝:封裝是將數(shù)據(jù)和代碼捆綁到一起,避免了外界的干擾和不確定性。對象的某
15、些數(shù)據(jù)和代碼可以是私有的,不能被外界訪問,以此實現(xiàn)對數(shù)據(jù)和代碼不同級別的訪問權(quán)限。 4) 繼承:繼承是讓某個類型的對象獲得另一個類型的對象的特征。通過繼承可以實現(xiàn)代碼的重用:從已存在的類派生出的一個新類將自動具有原來那個類的特性,同時,它還可以擁有自己的新特性。 5) 多態(tài):多態(tài)是指不同事物具有不同表現(xiàn)形式的能力。多態(tài)機制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口,通過這種方式減少代碼的復(fù)雜度。 6) 動態(tài)綁定:綁定指的是將一個過程調(diào)用與相應(yīng)代碼鏈接起來的行為。動態(tài)綁定是指與給定的過程調(diào)用相關(guān)聯(lián)的代碼只有在運行期才可知的一種綁定,它是多態(tài)實現(xiàn)的具體形式。 7) 消息傳遞:對象之間需要相互溝
16、通,溝通的途徑就是對象之間收發(fā)信息。消息內(nèi)容包括接收消息的對象的標(biāo)識,需要調(diào)用的函數(shù)的標(biāo)識,以及必要的信息。消息傳遞的概念使得對現(xiàn)實世界的描述更容易。8) 方法:方法(method)是定義一個類可以做的,但不一定會去做的事。面向?qū)ο笾饕卣鳎?封裝性:封裝是一種信息隱蔽技術(shù),它體現(xiàn)于類的說明,是對象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))封裝為一個整體,以實現(xiàn)獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具有那些處理能力),而對象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和實現(xiàn)加工能力的算法)對用戶是隱蔽的。封裝的目的在于把對象的設(shè)計者和對象者的使用分開,使用者不必知曉行為
17、實現(xiàn)的細(xì)節(jié),只須用設(shè)計者提供的消息來訪問該對象。 繼承性:繼承性是子類自動共享父類之間數(shù)據(jù)和方法的機制。它由類的派生功能體現(xiàn)。一個類直接繼承其它類的全部描述,同時可修改和擴充。繼承具有傳遞性。繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,如果沒繼承性機制,則類對象中數(shù)據(jù)、方法就會出現(xiàn)大量重復(fù)。繼承不僅支持系統(tǒng)的可重用性,而且還促進系統(tǒng)的可擴充性。多態(tài)性:對象根據(jù)所接收的消息而做出動作。同一消息為不同的對象接受時可產(chǎn)生完全不同的行動,這種現(xiàn)象稱為多態(tài)性。利用多態(tài)性用戶可發(fā)送一個通用的信息,而將所有的實現(xiàn)細(xì)節(jié)都留給接受消息的對象自行決定,如是,同一消息即
18、可調(diào)用不同的方法。例如:print消息被發(fā)送給一圖或表時調(diào)用的打印方法與將同樣的print消息發(fā)送給一正文文件而調(diào)用的打印方法會完全不同。多態(tài)性的實現(xiàn)受到繼承性的支持,利用類繼承的層次關(guān)系,把具有通用功能的協(xié)議存放在類層次中盡可能高的地方,而將實現(xiàn)這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應(yīng)。在oopl中可通過在派生類中重定義基類函數(shù)(定義為重載函數(shù)或虛函數(shù))來實現(xiàn)多態(tài)性。 2.2.2 tcp/ip協(xié)議、udp協(xié)議tcp/ip(transmission control protocol/internet protocol)協(xié)議internet最基本的
19、協(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ū)動程序與接口卡)。鏈路層:鏈路層有時也被稱為數(shù)據(jù)鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機中對應(yīng)的網(wǎng)絡(luò)接口卡。他們一起處理與電纜(或其他任何傳輸媒介)的物理接口細(xì)節(jié)。網(wǎng)絡(luò)層:網(wǎng)絡(luò)層處理分組在網(wǎng)絡(luò)中的活動,例如分組的選路。在tcp/ip協(xié)議族中,網(wǎng)絡(luò)層協(xié)議包括ip協(xié)議(網(wǎng)際協(xié)議),icmp協(xié)議(internet互聯(lián)網(wǎng)控制報文協(xié)議),以及igmp協(xié)議(inte
20、rnet組管理協(xié)議)。傳輸層:傳輸層主要為兩臺主機上的應(yīng)用程序提供端到端的通信。在tcp/ip協(xié)議族中,有兩個互不相同的傳輸協(xié)議:tcp(傳輸控制協(xié)議)和udp(用戶數(shù)據(jù)報協(xié)議)。tcp為兩臺主機提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應(yīng)用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡(luò)層,確認(rèn)接收到的分組,設(shè)置發(fā)送最后確認(rèn)分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略所有這些細(xì)節(jié)。而另一方面,udp則為應(yīng)用層提供一種非常簡單的服務(wù)。它只是把稱作數(shù)據(jù)報的分組從一臺主機發(fā)送到另一臺主機,但并不保證該數(shù)據(jù)報能到達(dá)另一端。任何必需的可靠性必須由應(yīng)用層來提供。應(yīng)用層:應(yīng)用層
21、負(fù)責(zé)處理特定應(yīng)用程序的細(xì)節(jié)。 【面向連接的(tcp)連接過程】2.2.3 m f c(micrososft fundation classes,即微軟的基本類庫)mfc是一個編程框架,mfc (microsoft foundation class library)中的各種類結(jié)合起來構(gòu)成了一個應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立windows下的應(yīng)用程序,這是一種相對sdk來說更為簡單的方法。因為總體上,mfc框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。microsoft visual c+提供了
22、相應(yīng)的工具來完成這個工作:appwizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計用戶接口;classwizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實現(xiàn)了應(yīng)用程序特定的邏輯。為了支持對應(yīng)用程序概念的封裝,mfc內(nèi)部必須作大量的工作。例如,為了實現(xiàn)消息映射機制,mfc編程框架必須要保證首先得到消息,然后按既定的方法進行處理。又如,為了實現(xiàn)對dll編程的支持和多線程編程的支持,mfc內(nèi)部使用了特別的處理方法,使用模塊狀態(tài)、線程狀態(tài)等來管理一些重要信息。雖然,這些內(nèi)部處理對程序員來說是透明的,但是,懂得和理解mfc內(nèi)部機制有助于寫出功能靈活而強大的程
23、序??傊琺fc封裝了win32 api,ole api,odbc api等底層函數(shù)的功能,并提供更高一層的接口,簡化了windows編程。同時,mfc支持對底層api的直接調(diào)用。mfc提供了一個windows應(yīng)用程序開發(fā)模式,對程序的控制主要是由mfc框架完成的,而且mfc也完成了大部分的功能,預(yù)定義或?qū)崿F(xiàn)了許多事件和消息處理,等等??蚣芑蛘哂善浔旧硖幚硎录灰蕾嚦绦騿T的代碼;或者調(diào)用程序員的代碼來處理應(yīng)用程序特定的事件。mfc是c+類庫,程序員就是通過使用、繼承和擴展適當(dāng)?shù)念悂韺崿F(xiàn)特定的目的。例如,繼承時,應(yīng)用程序特定的事件由程序員的派生類來處理,不感興趣的由基類處理。實現(xiàn)這種功能的基礎(chǔ)
24、是c+對繼承的支持,對虛擬函數(shù)的支持,以及mfc實現(xiàn)的消息映射機制。2.2.4 windows socket 編程windows sockets無疑是我們進行網(wǎng)絡(luò)編程的利器。所有的windows sockets實現(xiàn)都支持流套接口和數(shù)據(jù)報套接口。應(yīng)用程序調(diào)用windows sockets的api實現(xiàn)相互之間的通訊。socket接口是網(wǎng)絡(luò)編程(通常是tcp/ip協(xié)議,也可以是其他協(xié)議)的api。最早的socket接口是berkeley接口,在unxi操作系統(tǒng)中實現(xiàn)。winsock也是一個基于socket模型的api,在microsoft windows操作系統(tǒng)類中使用。它在berkeley接口函數(shù)
25、的基礎(chǔ)之上,還增加了基于消息驅(qū)動機制的windows擴展函數(shù)。winscok1.1只支持tcp/ip網(wǎng)絡(luò),winsock2.0增加了對更多協(xié)議的支持。這里,討論tcp/ip網(wǎng)絡(luò)上的api。socket接口包括三類函數(shù):第一類是winsock api包含的berkeley socket函數(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、ht
26、onl、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。第三類是berkekley socket例程的windows專用的擴展函數(shù),如gethostbyname對應(yīng)的wsaasyngethost
27、byname(其他數(shù)據(jù)庫函數(shù)除了gethostname都有異步版本),select對應(yīng)的wsaasynselect,判斷是否阻塞的函數(shù)wsaisblocking,得到上一次windsock api錯誤信息的wsagetlasterror,等等。從另外一個角度,這些函數(shù)又可以分為兩類,一是阻塞函數(shù),一是非阻塞函數(shù)。所謂阻塞函數(shù),是指其完成指定的任務(wù)之前不允許程序調(diào)用另一個函數(shù),在windows下還會阻塞本線程消息的發(fā)送。所謂非阻塞函數(shù),是指操作啟動之后,如果可以立即得到結(jié)果就返回結(jié)果,否則返回表示結(jié)果需要等待的錯誤信息,不等待任務(wù)完成函數(shù)就返回。首先,異步函數(shù)是非阻塞函數(shù);其次,獲取遠(yuǎn)地信息的數(shù)
28、據(jù)庫函數(shù)是阻塞函數(shù)(因此,winsock提供了其異步版本);在berkeley socket函數(shù)部分中,不涉及網(wǎng)絡(luò)i/o、本地端工作的函數(shù)是非阻塞函數(shù);在berkeley socket函數(shù)部分中,網(wǎng)絡(luò)i/o的函數(shù)是可阻塞函數(shù),也就是它們可以阻塞執(zhí)行,也可以不阻塞執(zhí)行。這些函數(shù)都使用了一個socket,如果它們使用的socket是阻塞的,則這些函數(shù)是阻塞函數(shù);如果它們使用的socket是非阻塞的,則這些函數(shù)是非阻塞函數(shù)。windows sockets又利用下層的網(wǎng)絡(luò)通訊協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通訊工作。它們之間的關(guān)系如下圖所示:應(yīng)用程序一應(yīng)用程序二網(wǎng)絡(luò)編程界面,例如windows soc
29、ket等網(wǎng)絡(luò)通訊協(xié)議服務(wù)界面,例如tcp/ip操作系統(tǒng),例如windows物理通訊介質(zhì) 【windows sockets實現(xiàn)通訊工作的各層關(guān)系圖】2.2.5 client/server結(jié)構(gòu)(客戶機/服務(wù)器模式)client/server結(jié)構(gòu)(c/s結(jié)構(gòu))即客戶機和服務(wù)器結(jié)構(gòu)。c/s又稱client/server或客戶/服務(wù)器模式。服務(wù)器通常采用高性能的pc、工作站或小型機,并采用大型數(shù)據(jù)庫系統(tǒng),如oracle、sybase、informix或 sql server??蛻舳诵枰惭b專用的客戶端軟件。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到client端和ser
30、ver端來實現(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)用都可以進行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。c/s結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點就是客戶端響應(yīng)速度快。缺點主要有以下幾個:只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普及,
31、這需要我們的系統(tǒng)具有擴展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時要對系統(tǒng)進行專門的設(shè)計來處理分布式的數(shù)據(jù)。3 系統(tǒng)需求分析與設(shè)計開發(fā)3.1 系統(tǒng)需求分析在基于socket的聊天系統(tǒng),客戶端和服務(wù)器必須保持隨時隨地的連接。這有別于普通web瀏覽的連接方式。在使用瀏覽器訪問服務(wù)器時,先由客戶端發(fā)出http協(xié)議,然后服務(wù)器響應(yīng)處理這個客戶端的響應(yīng),再返回處理結(jié)果;請求(request)和響應(yīng)(response)是一種一對一的前后因果關(guān)系。而在基于socket的聊天系統(tǒng)中,客戶端發(fā)出聊天信息的同時,客戶端也在接受服務(wù)器發(fā)送過來的其他人的聊天信息,因此,請求和響應(yīng)不存在那種前后對應(yīng)關(guān)系,是兩種分別獨立進
32、行的進程。因為服務(wù)器任何時候都可能發(fā)送信息到客戶端,因此,客戶端和服務(wù)器一旦建立連接,必須能讓服務(wù)器在以后發(fā)送中尋找定位到這個連接。聊天系統(tǒng)在客戶端和服務(wù)器之間主要傳送的是文字信息,服務(wù)器端只需要把最近的文字信息推送到客戶端,這樣減少了網(wǎng)絡(luò)傳輸內(nèi)容,節(jié)省了網(wǎng)絡(luò)傳輸?shù)臅r間,無疑提高了聊天速度。這種“推”技術(shù)是目前基于socket聊天系統(tǒng)的主要實現(xiàn)技術(shù)。該聊天程序分為服務(wù)器端和課戶端兩個部分。他們之間的關(guān)系圖如下:clientserverclientclientclient更新成員列表成員列表請求應(yīng)答發(fā)送消息 【服務(wù)器與客戶端之間關(guān)系圖】3.2 系統(tǒng)設(shè)計3.2.1 設(shè)計原則考慮到系統(tǒng)的可重用性和伸
33、縮性,需要將本系統(tǒng)的網(wǎng)絡(luò)通信底層和應(yīng)用系統(tǒng)分離開。這樣,基于可重用的網(wǎng)絡(luò)通信層,可以實現(xiàn)其他各種實時性較高的應(yīng)用系統(tǒng)。本系統(tǒng)在架構(gòu)設(shè)計上將分4個層次,如下圖所示。casyncsocketcsocket聊天、游戲等應(yīng)用系統(tǒng)window sockets api 【架構(gòu)層次】本系統(tǒng)最底層是socket通信層,將負(fù)責(zé)客戶端和服務(wù)器之間快速的數(shù)據(jù)交換,它通過接口層和最上面應(yīng)用層保持實時數(shù)據(jù)聯(lián)系。用戶從客戶端進入到本系統(tǒng)前,將實現(xiàn)統(tǒng)一的用戶登錄驗證機制。socket底層設(shè)計分兩大部分:協(xié)議設(shè)計和連接處理設(shè)計:協(xié)議設(shè)計和連接處理設(shè)計;csocket層的目的是提供底層和應(yīng)用蹭一個中介媒體的作用,但是不能設(shè)計得
34、太復(fù)雜,以免延誤數(shù)據(jù)傳送時間。3.2.2 工作流程只有充分地了解了聊天程序的工作流程,才能對整個系統(tǒng)的理解更加深刻,聊天程序的工作流程如下圖所示。加載套接字庫初始化套接字綁定本地機到套接字向指定ip地址發(fā)送數(shù)據(jù)關(guān)閉套接字庫結(jié)束聊天創(chuàng)建線程用于接受數(shù)據(jù)【聊天程序的工作流程】3.2.3 功能設(shè)計局域網(wǎng)聊天系統(tǒng)以局域網(wǎng)內(nèi)的用戶為應(yīng)用對象,經(jīng)過各方面需求分析,該系統(tǒng)主要由服務(wù)器端和客戶端兩部分構(gòu)成,各功能模塊如下圖所示。局域網(wǎng)聊天系統(tǒng)服務(wù)器客戶端開啟服務(wù)器停止服務(wù)器配置服務(wù)器關(guān)閉服務(wù)器發(fā)送離線信息登陸文字傳送接收離線信息用戶管理【局域網(wǎng)聊天系統(tǒng)功能模塊圖】4 系統(tǒng)的實現(xiàn) 4.1 服務(wù)請求規(guī)范4.1.1
35、 服務(wù)器端(1) 創(chuàng)建一個udp的套接字,接受來自客戶端的廣播請求,當(dāng)請求報文內(nèi)容為“request for ip address and serverport”時,接受請求,給客戶端發(fā)送本服務(wù)器tcp聊天室的端口號。(2) 創(chuàng)建一個主要的tcp協(xié)議的套接字負(fù)責(zé)客戶端tcp連接 ,處理它的連接請求事件。(3)在主要的tcp連接協(xié)議的套接字里面再創(chuàng)建tcp套接字保存到動態(tài)數(shù)組里,在主要的套接字接受請求后 ,就用這些套接字和客戶端發(fā)送和接受數(shù)據(jù)。4.1.2 客戶端(1) 當(dāng)用戶按“連接”按鈕時,創(chuàng)建udp協(xié)議套接字,給本地計算機發(fā)廣播,廣播內(nèi)容為“request for ip address an
36、d serverport”。(2)當(dāng)收到服務(wù)器端的回應(yīng),收到服務(wù)器發(fā)來的端口號后,關(guān)閉udp連接。根據(jù)服務(wù)器的ip地址和端口號重新創(chuàng)建tcp連接。故我思考:客戶端一定要知道服務(wù)器的一個端口,我假設(shè)它知道服務(wù)器udp服務(wù)的端口,通過發(fā)廣播給服務(wù)器的udp服務(wù)套接字,然后等待該套接字發(fā)回服務(wù)器tcp聊天室服務(wù)的端口號,ip地址用receivefrom也可以得到。4.2 主要模塊的設(shè)計分析4.2.1 客戶端模塊 類模塊如下: 主要函數(shù)說明:class clientsocket:public csocketbool checkusername(cstring strusername);/檢查用戶名是否
37、重復(fù)void cutmessage(cstring strtext);/把消息分離開處理void delonlineuser(cstring strusername);/刪除一個在線用戶void addchatcontent(cstring strtext);/往內(nèi)容框添加記錄void addonlineuser(cstring strusername);/增加一個用戶void handlemsg(cstring strmsg);/根據(jù)標(biāo)志位進行消息處理cwnd *m_pchatdlg;/指向窗口的指針,用于輸出void sendusername();/tcp;連接后第一次發(fā)送用戶名void
38、sendtoone(cstring strtext);/把指定字符串發(fā)送給一個人("悄悄話”)void sendtoall(cstring strtext);/把制定字符串發(fā)送給所有在想用戶void getusername();/從對話框獲得用戶名bool createtcpsocket();/創(chuàng)建tcp套接字并連接bool createudpsocket();/創(chuàng)建udp套接字并發(fā)廣播客戶端的數(shù)據(jù)處理模塊:/消息處理函數(shù)/通信格式約定如下:/*/*(0 )用戶名與服務(wù)器上的重復(fù)*/*stx+0+用戶名+etx*/*()首次傳輸在線用戶名*/*stx+1+用戶名+etx*/*()傳輸
39、新到用戶名*/*stx+2+用戶名+etx*/*()傳輸離線用戶名*/*stx+3+用戶名+etx*/*()傳輸聊天數(shù)據(jù)*/*stx+4+內(nèi)容+etx*/*/void cclientsocket:handlemsg(cstring strmsg)cstring strtmp;switch(strmsg.getat(1)case '0':/用戶名已存在strmsg = strmsg.mid(2, strmsg.getlength()-3);/刪掉頭尾控制位strmsg += "用戶名已存在,請嘗試用另外的用戶名登陸!rn"+gettime();addchatc
40、ontent(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 = strms
41、g + "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)容,直接顯示strt
42、mp = strmsg.mid(2, strmsg.getlength()-3);strtmp += gettime();/消息末尾加上時間,直接顯示addchatcontent(strtmp);break;4.2.2 服務(wù)器端類結(jié)構(gòu)主要類:cchatserverdlg,負(fù)責(zé)響應(yīng)窗口輸入輸出cserversocket,服務(wù)器的主服務(wù)套接字類型,負(fù)責(zé)監(jiān)聽客戶端的tcp連接請求,并控制整個聊天室的總體數(shù)據(jù)接收與發(fā)送cclientsocket,它的對象定義在cserversocket里,定義為動態(tài)數(shù)組對象,負(fù)責(zé)主服務(wù)套接字accept后,由它來和客戶端通信。cudpsocket,一直開啟,負(fù)責(zé)客戶端
43、一開的udp連接請求,給客戶端發(fā)送服務(wù)的端口號。cportinput,輸入端口號對話框。4.3 系統(tǒng)運行效果4.3.1 服務(wù)器端效果圖【服務(wù)器端效果圖】4.3.2 客戶端效果圖【客戶端效果圖】4.4 系統(tǒng)測試4.4.1 測試意義本章對我們的系統(tǒng)做具體的測試,驗證系統(tǒng)的功能是否得以實現(xiàn)。【服務(wù)器端代碼測試】【客戶端代碼測試】4.4.2 軟件測試的目標(biāo)(1)測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行的程序的過程;(2)好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案;(3)成功的測試時發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。從上述規(guī)則可以看出,測試的正確定義是“為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程”。正
44、確認(rèn)識測試是非常重要的,測試目標(biāo)決定了測試方案的設(shè)計。沒有發(fā)現(xiàn)錯誤的測試也是有價值的,完整的測試是評定測試質(zhì)量的一種方法。4.4.3 軟件測試的方法軟件的測試分為兩種:黑盒測試和白盒測試。黑盒測試:黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試地,把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序接口進行測試。它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息。黑盒測試著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu),主要針對軟件界面和軟件功能進行測試。白盒測試:軟件的白盒測試是對軟件的過程性細(xì)
45、節(jié)做細(xì)致的檢查。這種方法是把測試對象看做一個打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序狀態(tài),確定實際狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。白盒測試主要是想對程序模塊進行如下檢查:1、對程序模塊的所有獨立的執(zhí)行路徑至少測試一遍。2、對所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測一遍。3、在循環(huán)的邊界和運行的界限內(nèi)執(zhí)行循環(huán)體。4、測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等等。測試用例如下表:功能描述用戶登錄用例目的測試用戶登錄功能是否正常前提條件客戶端程序和服務(wù)器端程序處于運行狀態(tài)輸入/動作期望的輸出/相應(yīng)實際情況示例1:輸入正確的用戶名、服務(wù)器ip和端口號用戶成功登陸,關(guān)閉登陸窗體,彈出客戶端主界面與期望輸出相同示例2:不輸入用戶名、輸入服務(wù)器ip和端口號無法登陸服務(wù)器與期望輸出相同示例3:輸入正確的用戶名,輸入錯誤服務(wù)器ip和端口號用戶登陸失敗,連接服務(wù)器失敗與期望輸出相同示例4:輸入錯誤的用戶名,輸入正確服務(wù)器ip和端口號用戶登錄失敗,用戶名輸入錯誤與期望輸出相同總結(jié)經(jīng)過3個月緊張的畢業(yè)設(shè)計,網(wǎng)絡(luò)實時聊天軟件已基本完成,系統(tǒng)基本功能已經(jīng)實現(xiàn),測試運行也完全正常。在畢業(yè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年特色小吃攤位租賃合同
- 2025版物業(yè)服務(wù)合同管理與維修責(zé)任劃分
- 2024甲公司與丙企業(yè)就新建項目合作之股權(quán)轉(zhuǎn)讓合同
- 2025年度安全生產(chǎn)信息共享與責(zé)任承擔(dān)合同
- 二零二五年度房屋買賣定金合同(含車位租賃優(yōu)惠)樣本3篇
- 2024年簡化版租房合同:免責(zé)條款精要
- 酒店餐飲管理咨詢與運營合同
- 電子元器件采購供應(yīng)合同
- 2024版水電安裝承包合同樣本
- 二零二五年度導(dǎo)購員招聘與職業(yè)生涯規(guī)劃合同范本2篇
- 世界十大物理學(xué)家圖文
- 門店營銷氛圍的重要性
- 三年級數(shù)學(xué)(上)計算題及答案集錦
- 科目余額表模板
- 【大單元教學(xué)】Unit 8 單元整體教學(xué)設(shè)計
- 學(xué)生自主管理實施方案10篇
- 亞朵酒店管理手冊
- 紀(jì)檢機關(guān)查辦案件分析報告
- 文化藝術(shù)中心行業(yè)技術(shù)創(chuàng)新及應(yīng)用
- 2024年航空職業(yè)技能鑒定考試-航空乘務(wù)員危險品歷年考試高頻考點試題附帶答案
- 精神病院設(shè)置可行性方案
評論
0/150
提交評論