畢業(yè)設計(論文)網絡實時聊天系統開發(fā)與設計_第1頁
畢業(yè)設計(論文)網絡實時聊天系統開發(fā)與設計_第2頁
畢業(yè)設計(論文)網絡實時聊天系統開發(fā)與設計_第3頁
畢業(yè)設計(論文)網絡實時聊天系統開發(fā)與設計_第4頁
畢業(yè)設計(論文)網絡實時聊天系統開發(fā)與設計_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGE26網絡實時聊天系統開發(fā)與設計摘要隨著現今計算機與英特網的飛速發(fā)展與普及,人與人之間的交流也隨之越來越方便,使用網絡聊天的人群也越來越大,人們對網絡聊天的需求也日益顯著。本文主要提出網絡實時聊天系統的開發(fā)與設計,是一個基于VC開發(fā)平臺設計與實現的聊天系統。能實現基于VC++的網絡實時聊天,本系統具有單獨的客戶端和服務器端。服務器應用程序能夠接受來自客戶端的廣播,然后向客戶端發(fā)送本機的IP與服務端口號,讓大家能通過客戶端接入到服務器進行聊天。服務器負責接收來自客戶端的聊天信息,然后通過不同的IP發(fā)送給指定的地址,同時服務器還可以監(jiān)聽客戶端的登錄與退出。主要使用WindowsSocket編程,建立Client/Server模型,實現一個服務器和多個客戶端的一對多模式,各個客戶端之間實現相互的通信。關鍵字:WindowsSocket、Client/Server、套接字、實時通信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系統現狀 119991.2本系統研究內容 2203902系統的開發(fā)環(huán)境與相關關鍵技術 3110202.1開發(fā)環(huán)境 3270152.2相關關鍵技術 3163192.2.1VisualC++與面向對象程序設計 3156312.2.2TCP/IP協議、UDP協議 5262192.2.3MFC(MicrososftFundationClasses,即微軟的基本類庫) 6119222.2.4WindowsSocket編程 718492Client/Server結構(客戶機/服務器模式) 913203系統需求分析與設計開發(fā) 10286983.1系統需求分析 10194153.2系統設計 1176413.2.1設計原則 1118753.2.2工作流程 11160813.2.3功能設計 12177344系統的實現 14207424.1服務請求規(guī)范 1478374.1.1服務器端 14145314.1.2客戶端 1485104.2主要模塊的設計分析 14174024.2.1客戶端模塊 1411344.2.2服務器端類結構 18208774.3系統運行效果 19259704.3.1服務器端效果圖 1910044.3.2客戶端效果圖 20302574.4系統測試 20250134.4.1測試意義 2055994.4.2軟件測試的目標 2272194.4.3軟件測試的方法 2219443總結 2413037致謝 258193參考文獻 261緒論近年來計算機技術的快速發(fā)展,特別是計算機網絡的發(fā)展,越來越深刻的改變了人們生活的方方面面。使得人們能以更低廉的價格,開發(fā)出更方便、更實用的網絡工具。各種在線服務系統,更是深刻的影響了人們的聯系方式,使得人們可以在遠隔千里之遙隨時通訊。網上聊天系統是為人們進行交流和聯系提供的一個平臺。利用現代的網絡資源優(yōu)勢和技術優(yōu)勢,通過提供完善的網上聊天系統的管理,以達到增進人與人之間的信息交流和溝通的目的,并以此加快人們的信息化建設。在市場上,關于網上聊天室系統開發(fā)的軟件有很多,本系統基于VC開發(fā),通過套接字SOCKET實現,作為今后將從事軟件開發(fā)的學生,即時了解和掌握流行的即時通訊機制并且應用到實踐過程中,將極大的提高自己的設計和開發(fā)軟件的積極性;提升自己的理論和技術水平,跟蹤國內外最新的技術和開發(fā)模式,為以后類似的開發(fā)積累經驗;同時,開發(fā)出來的作品也可以真正運用到實際當中。網絡聊天室是當今廣泛應用的一種網絡服務,它為廣大網民提供了一種方便快捷的溝通方式,在線聊天是上網的重要活動之一。1.1系統現狀文本方式聊天室:基于Web的聊天室有其獨特的優(yōu)勢。它不需要安裝專門的軟件,Web瀏覽器就可以使用聊天服務;它集成在Web服務器中,不需額外的硬件支持,便于廣大中小型客戶建設和使用。所以,基于Web的聊天室仍然被廣泛采用。但是單純聊天的一般內容比較單一,主要局限于角色認知過程中職業(yè)、地域、性別等方面的擴展,難以實現“失去他人注視的真實自我的展現”。

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

溫馨提示

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

最新文檔

評論

0/150

提交評論