




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、摘 要隨著Internet技術的飛速發(fā)展,網(wǎng)絡已經(jīng)成為人們生活中不可缺少的一部分,通過聊天室在線聊天已成為網(wǎng)絡上人與人之間溝通、交流和聯(lián)系的一種方式。為此,越來越多的網(wǎng)站開始提供在線聊天的功能。與此同時,聊天室也以其方便、快捷、低成本等優(yōu)勢受到眾多企業(yè)的青睞,很多企業(yè)的網(wǎng)站中也加入了聊天室模塊,以達到增進企業(yè)與消費者之間、消費者與消費者之間相互交流的目的。本文是軟件工程在線聊天室系統(tǒng)的開發(fā)說明,重點運用軟件工程知識對系統(tǒng)進行分析、設計實現(xiàn)和測試的思想的具體描述,其中包括軟件生命周期的三個主要方面:軟件定義(問題定義、可行性研究、需求分析)、軟件開發(fā)(總體設計、詳細設計、編碼、測試)和運行維護。
2、通過實際的運用軟件工程知識處理問題,加強程序的規(guī)范性、清晰性、可靠性,并且使得程序易于維護。本軟件使用JAVA進行編寫,具有良好的兼容性且易于實現(xiàn)。聊天室操作簡潔容易上手、結構簡單、查找方便、實用性強。關鍵字:網(wǎng)絡、通信、套接字、連接目錄序言.3第一章 VisualC+及Socket套接字介紹.5 一 VisualC+ 介紹.5 二 Socket套接字介紹.6 第二章 軟件需求分析.15 一 系統(tǒng)客戶要求.15 二 系統(tǒng)詳細設計.16三 系統(tǒng)開發(fā)目標.17四 系統(tǒng)開發(fā)思路.17五 需求總結.18第三章 系統(tǒng)具體實現(xiàn).21一 概要設計.21二 定義服務器端和客戶端的通信結構及含義.22 三 服務
3、器端的實現(xiàn)流圖.25四 客戶端的實現(xiàn)流圖.28第四章 系統(tǒng)測試 .30第五章 系統(tǒng)運行和維護.32第六章 結束語.33參考文獻.34序 言隨著現(xiàn)代技術的不斷輸入和信息化的廣泛普及,網(wǎng)絡作為一種新興事物,在近些年得到了前所未有的普及和深入,網(wǎng)絡上的各種應用層出不窮,給各個階層、各個年齡段的用戶提供了不同的個性化的服務。而現(xiàn)代中小型企業(yè)的領導認識到進一步提高企業(yè)信息化的必要性。為使企業(yè)能在瞬息萬變的信息時代生存下去,適應激烈的市場競爭,現(xiàn)代企業(yè)要求正加員工之間的交流和通信能力,尤其是領導和員工之間的共同能力,實時的交流系統(tǒng)就是在這種條件下誕生的。系統(tǒng)開發(fā)是一個十分復雜的系統(tǒng)工程。這里對系統(tǒng)開發(fā)的基
4、本過程和方法進行介紹,列出相關文檔的示例并加以說明。要提高市場競爭力,就要對市場作充分的調(diào)查和詳細的研究,同時也要有好的客戶服務。企業(yè)要在復雜的環(huán)境下作出對策。員工與員工 員工與領導間的即時交流尤為重要,網(wǎng)絡在線聊天系統(tǒng)對于企業(yè)來說就是一種交流和通信的平臺,本系統(tǒng)能夠成為中小型企業(yè)的交流通信的理想平臺。如能做到信息的及時的反饋,即時的處理并作出相應的行動,將能進一步提高中小型企業(yè)在現(xiàn)代經(jīng)濟市場的競爭能力。網(wǎng)絡通信是網(wǎng)絡應用的重要體現(xiàn)方面。網(wǎng)上即時通信則是網(wǎng)絡應用的重要體現(xiàn)方面。本聊天系統(tǒng)主要應用于小型企業(yè),學?;蛐⌒途钟蚓W(wǎng)內(nèi)部使用。本應用程序使短距離交流更加快捷和便利。更能高效率的體現(xiàn)現(xiàn)代即時
5、通信的特點。本系統(tǒng)能夠滿足中小型企業(yè),學校的內(nèi)部網(wǎng)絡即時通信的需要,在內(nèi)部網(wǎng)絡正常環(huán)境的運營下,提供即時通信的能力,本系統(tǒng)使用Visual C+開發(fā),本系統(tǒng)能夠為中小型企業(yè)協(xié)同工作,相互間的交流提供了有力的工具,運用在局域網(wǎng)的本系統(tǒng),能夠為企業(yè)員工的交流提供幫助,有利于提高工作效率。第一章 VisualC+及Socket套接字介紹一 Visual C 介紹和其他編程工具相比,Visual C+在提供可視化編程方法的同時,適應于編寫直接對系統(tǒng)進行底層操作的程序.其生成代碼的質量,也要優(yōu)于許多其他開發(fā)工具.Visual C+所提供的MFC(Microsoft基本類庫),對Window98/NT/2
6、000所用的Win32 API(應用程序接口)進行了徹底的封裝,這使得可以使用完全的面向對象的編程方法來進行Windows程序的開發(fā),并能夠大大縮短程序的開發(fā)周期,降低開發(fā)成本,把Windows程序員從大量復雜的勞動中解放出來.Visual C+給應用程序的開發(fā)人員提供了豐富的功能,Visual C+通過MFC庫提供了一個完整的應用程序的骨架,開發(fā)人員可以忽略應用程序的入口點和結束地點,并且可以忽略消息在應用程序的流動順序,通過MFC的支持Visual C+也提供了Document-View(文檔視圖)的應用程序的結構,開發(fā)人員可以將數(shù)據(jù)保存在Document類的對象上,而在屏幕的顯示的數(shù)據(jù)由
7、View類的對象來負責。通過MFC的支持Visual C+也實現(xiàn)了面向對象領域的RTTI(RunTime Type Information 運行時類型識別)、Dynamic Creation(動態(tài)創(chuàng)建)、(Persitence)永久保存機制,同時他也實現(xiàn)了Windows下的Message Mapping(消息映射)和Command Routing(命令傳遞),通過MFC的Cdatabase和Crecordset類Visual C+可以實現(xiàn)數(shù)據(jù)庫的應用,通過ChtmlStream、CHttpFilter、CHttpFilterContext、ChttpServer等ISAPI(Internet
8、Server API)可以很好的支持Internet上的http協(xié)議相關的操作。由于MFC涉及到應用程序開發(fā)的各個領域,其Visual C+成為倍受歡迎的開發(fā)工具。二 Socket套接字介紹Winsock是一套開放的,支持多種協(xié)議的Windows下網(wǎng)絡編程接口,是Windows網(wǎng)絡編程實是上的標準.應用程序通過調(diào)用Winsock的API實現(xiàn)相互間的通信,而Winsock利用下層的網(wǎng)絡通信協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通信工作.1 套接字(Sockets)套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的操作單元.可以將套接字看作不同主機間的進程進行雙向通信的端點,它構成了單個主機內(nèi)及整個
9、網(wǎng)絡間的編程界面.套接字存在于通信域中.通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念.套接字通過通常和同一個域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時一定要執(zhí)行某種解釋程序).Winsock規(guī)范支持單一的通信域,即Internet域.各種進程使用這個域互相之間用Internet協(xié)議簇來進行通信(Winsock 1.1以上的版本支持其他的域)。套接字可以根據(jù)通信性質分類,這種性質對于用戶時可見的.應用程序一般僅在同一類的套接字間通信.不過只要底層的通信協(xié)議允許,不同類型的套接字間也照樣可以通信進入九十年代后,隨著計算機和網(wǎng)絡技術的發(fā)展,很多數(shù)據(jù)處理系統(tǒng)都采用開放系統(tǒng)
10、結構的客戶機/服務器網(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)異種機、異種操
11、作系統(tǒng)應用程序間的相互連接和通信。套接字(sockets)是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙向通信的端點。它構成了在單個主機內(nèi)及整個網(wǎng)際間的編程界面。一般來說,跨機應用進程之間要在網(wǎng)絡環(huán)境下進行通信,必須要在網(wǎng)絡的每一端都要建立一個套接字,兩個套接字之間是可以建立連接的,也是可以無連接的,并通過對套接字的“讀”、“寫”操作實現(xiàn)網(wǎng)絡通信功能。類似于UNIX系統(tǒng)中的I/O概念,像文件那樣有打開、讀、寫、關閉的方式。根據(jù)傳輸數(shù)據(jù)類型的不同,套按字可分為面向連接的數(shù)據(jù)套接字(streamsockets)和無連接的數(shù)據(jù)報套接字(datagramsock
12、ets)兩種類型:(1)字節(jié)流套接字字節(jié)流不按記錄定界,在TCP/IP協(xié)議簇中對應TCP協(xié)議,即傳輸控制協(xié)議(TransmitionControlProtocol)。它是一個提供給用戶進程可靠的全雙工的面向連接的協(xié)議,大多數(shù)INTERNET應用程序如ftp、telnet使用TCP協(xié)議。通信端點使用TCP對應的INTERNET地址互相連接,可保證按正確的順序以及單一和可靠的地址傳輸數(shù)據(jù)。由于它是字節(jié)流,所以包長包沒有限制,信包傳輸也不重復,因而是一種常用的套接字類型。流套接字提供雙向的,有序的,無重復并且無記錄邊界的數(shù)據(jù)流服務,它適應于處理大量數(shù)據(jù).網(wǎng)絡傳輸層可以將數(shù)據(jù)分散或集中到合適尺寸的數(shù)據(jù)
13、包中。流套接字是面向連接的,通信雙方進行數(shù)據(jù)交換之前,必須建立一條路徑,這樣即確定了它們之間存在的路徑,又保證了雙方都是活動的,可彼此相應的,但在通信雙方之間建立一個通信信道需要很多開支.除此以外,大部分面向連接的協(xié)議為保證發(fā)送無誤,可能會需要執(zhí)行額外的計算機來驗證正確性,為此會進一步增加開支。(2)數(shù)據(jù)報套接字數(shù)據(jù)報對應記錄型數(shù)據(jù)流,在TCP/IP協(xié)議簇中對應UDP協(xié)議,即用戶數(shù)據(jù)報協(xié)議(UserDatagramProtocol)。利用數(shù)據(jù)報服務可實現(xiàn)一些簡單的網(wǎng)絡服務,如網(wǎng)點檢測程序PING。由于不建立連接,數(shù)據(jù)報協(xié)議比連接協(xié)議快。但不能保證所有數(shù)據(jù)都準確有序地到達目的地。不保證順序性、可
14、靠性和無重復性。它是無連接的服務,以獨立的信包進行傳輸,通信端點使用UDP對應的INTERNET地址。雙方不需互連,按固定的最大長度進行傳輸,因而適用于單個報文傳輸,或較小文件的傳輸。數(shù)據(jù)報套接字支持雙向的數(shù)據(jù)流,但不保證數(shù)據(jù)傳輸?shù)目煽啃?有序性,和無重復性.也就是說,一個從數(shù)據(jù)報套接字接受信息的進程有可能發(fā)現(xiàn)信息重復,或者和發(fā)出時間順序不同的情況.此外,數(shù)據(jù)報套接字的一個重要特點是它保留了記錄邊界。數(shù)據(jù)報套接字是無連接的,它不保證接受端是否在監(jiān)聽,類似郵政服務:發(fā)信人把信裝入郵箱即可,至于收信人是否收到這封信或郵局是否會因為暴風雨未能按時將信件投入收信人處等等,發(fā)信人都不得而知.因此,數(shù)據(jù)報
15、并不十分可靠,需有程序員負責管理數(shù)據(jù)的排序和可靠性)。2套接字的編程要點及過程不論何種套接字編程,均采用客戶機/服務器方式,其運作過程基本類似,限于篇幅,這里僅介紹字節(jié)流套接字。字節(jié)流套按字的服務進程和客戶進程,在通信前必須創(chuàng)建各自的套接字以建立連接,然后對相應的套接字進行“讀”、“寫”操作,實現(xiàn)信息的交換。服務器進程創(chuàng)建套接字。服務進程總是先于客戶進程啟動,服務進程首先調(diào)用socket()函數(shù)創(chuàng)建自已端的一個字節(jié)流套接字,并提供三個參數(shù):網(wǎng)絡地址類型,一般取AF_INEF(AdressfamilyInterNET);套接字類型,這里取SOCK_STREAM;網(wǎng)絡協(xié)議,缺省為TCP/IP協(xié)議,
16、對應參數(shù)為0。給套接字地址變量賦初值。在生成套接字后,要用服務器的地址先對sockaddr_in結構變量賦初值。sockaddr_in它只適用INTERNET地址類型,含有INTERNET套接字地址類型、IP端口號、IP地址等信息。地址類型可取定為AF_INET,IP地址對服務器可取任意合法地址INADDR_ANY。IP端口號可由用戶設定,但要注意主機字節(jié)順序向網(wǎng)絡字節(jié)順序的轉換。給套接字命名。由socket()函數(shù)創(chuàng)建的套接字是沒有名字的。所謂命名,就是用bind()函數(shù)將服務器地址捆綁到創(chuàng)建的套接字上。服務器進程準備接受來自客戶機的連接請求。首先調(diào)用listen()函數(shù),讓服務器進程進入監(jiān)
17、聽狀態(tài);然后調(diào)用accept()函數(shù),準備接受客戶機的連接信號。無連接請求時,服務進程被阻塞??蛻暨M程調(diào)用socket()函數(shù)創(chuàng)建已端的套接字。給客戶端的sockaddr_in結構體變量賦值。地址類型仍可取AF_INET,端口號和服務器方的端口號相同,欲連服務器的地址通過調(diào)用inet_addr()轉換得到。也可通過gethostbyname()函數(shù)將名字轉換為指向hostent結構變量的指針,再將hostent結構變量的地址成員用bcopy()復制到sockaddr_in結構變量上??蛻舴秸{(diào)用connect()函數(shù)向服務進程發(fā)出連接請求。當連接請求到來后,被阻塞服務進程的accpet()函數(shù)生
18、成一個新的字節(jié)流套接字,并返回客戶機的sockaddr_in結構變量,從而在服務器應用程序中用新的被賦予客戶機地址的套接字同客戶進程進行連接,然后向客戶方返回接受信號。一旦客戶機的套接字收到來自服務器的接受信號,則表示客戶機與服務器雙方已實現(xiàn)連接。任一方均可向對方發(fā)送,也可接收對方發(fā)來的數(shù)據(jù)。這既可通過send()、recv()函數(shù)來實現(xiàn)。也可通過read()、write()函數(shù)來交換數(shù)據(jù)。服務進程和客戶進程可通過調(diào)用shutdown()和colse()關閉套接字上的所有發(fā)送和接收操作,撤銷套接字并中斷連接3 基本概念(1)帶外數(shù)據(jù)帶外數(shù)據(jù),也稱為TCP緊急數(shù)據(jù),它是相連的每一對流套接字間的一
19、個邏輯上獨立的傳輸通道,帶外數(shù)據(jù)是獨立于普通數(shù)據(jù)傳輸給用戶的,這一抽象要求帶外數(shù)據(jù)設備必須支持每一時刻僅有一個帶外數(shù)據(jù)信息等候發(fā)送。對于僅支持帶外數(shù)據(jù)的通信協(xié)議來說(例如緊急數(shù)據(jù)是與普通數(shù)據(jù)在同一序列發(fā)送),系統(tǒng)通常把緊急數(shù)據(jù)從普通數(shù)據(jù)中分離出來單獨存放。這就允許用戶可以在順序接受緊急數(shù)據(jù)和非順序接收緊急數(shù)據(jù)之間作出選擇。(2)廣播數(shù)據(jù)報套接字可以用來向許多系統(tǒng)支持的網(wǎng)絡發(fā)送廣播數(shù)據(jù)包。要實現(xiàn)這種功能,網(wǎng)絡必須支持廣播功能。為此系統(tǒng)軟件并不提供對廣播功能的任何模擬。廣播信息將會給網(wǎng)絡造成極重的負擔,為此它們要求網(wǎng)絡上的每臺主機都為他們服務,所以發(fā)送廣播數(shù)據(jù)包的能力被限制于那些用顯式標記了允許廣
20、播的套接字中。廣播通常應用于以下兩種情況:l 一個應用程序希望在本地網(wǎng)絡中找到一個資源。而應用程序對該資源的地址又沒有任何先驗的知識。l 一些重要功能,例如路由要求把它們的信息發(fā)送給所有可以找到的鄰機。被廣播信息的目的地址取決于這一信息將在何種網(wǎng)絡上廣播。Internet域中支持一個速記地址INADDR_BROADCAST用于廣播。由于使用廣播以前必須綁定一個數(shù)據(jù)包套接字,所以所有收到的廣播消息都帶有發(fā)送者的地址和端口。(3)字節(jié)順序不同的計算機有時使用不同的字節(jié)順序存儲數(shù)據(jù)。例如,基于Intel處理器的計算機和Macintosh計算機使用了相反的字節(jié)排序順序。Intel的字節(jié)順序被成為“Li
21、ttle-Endian”,它與網(wǎng)絡的字節(jié)排序順序“Big-Endian”排序順序相反。任何從Winsock函數(shù)對IP地址和端口號的引用和傳送給Winsock函數(shù)的IP地址和端口號均是按照網(wǎng)絡順序組織的,這也包括了sockaddr_in這一數(shù)據(jù)結構中的IP地址域和端口域考慮到一個應用程序通常用與“時間”服務對應的端口來和服務器連接,而服務器提供某些機制來通知用戶使用另一端口。為此getservbyname函數(shù)返回的端口已經(jīng)是網(wǎng)絡順序了,可以直接使用來組織成一個地址,而不需要進行轉換。然而如果從主機順序轉換成網(wǎng)絡順序。相應地,如果應用程序希望顯示包含于某一地址中地端口號,則這一端口號就必須在被顯示
22、前從網(wǎng)絡順序轉換到主機順序。(4)阻塞和非阻塞套接字可以處于阻塞模式或非阻塞模式。調(diào)用任何一個阻塞模式地函數(shù),都回產(chǎn)生相同地后果-耗費或長或短地時間等待操作地完成。而當套接字處于非阻塞模式時,API函數(shù)的調(diào)用會立即返回,大多數(shù)情況這些調(diào)用都回“失敗”,并返回一個WASEWOULDBLOCK的錯誤,它意味著請求的操作在調(diào)用期間沒有時間完成。Winsock的套接字I/O模型可以幫助應用程序判斷一個套接字何時可供讀寫.套接字的行為在Windows 9X 和Windows NT中與在 Windows 3.1中不同.在32位操作系統(tǒng)中,可以采用多線程編程,在不同的線程中使用套接字,這樣即使某個線程中的套
23、接字被阻塞,也不會影響應用程序的其他操作,同時也不會在阻塞線程上耗費CPU時間。(5) Winsock編程原理進入20世紀90年代后,隨著計算機和網(wǎng)絡技術的發(fā)展,很多數(shù)據(jù)處理系統(tǒng)都采用開放系統(tǒng)結構的客戶機/服務器(Client/Server)網(wǎng)絡模型,即客戶機向服務器提交請求,服務器對請求做相應的處理兵執(zhí)行被請求的任務,然后將結構返回給客戶機。這種方式隱含了在建立客戶機/服務器間通信是的非對稱性??蛻魴C/服務器模型工作時要求有一套為客戶機和服務器所共識的慣例來保證服務能夠被提供(或被接受),這一套慣例包含了一套協(xié)議,它必須在通信的兩頭都被實現(xiàn)。根據(jù)不同的實際情況,協(xié)議可能是對稱的或非對稱的。在
24、對稱的協(xié)議中每一方都有可能扮演主從角色;在非對稱協(xié)議中一方被不可改變地認為是主機,而另一方則是從機。一個對稱協(xié)議地例子是Internet中用于終端仿真地Telnet,而非對稱協(xié)議地例子是Internet中的http。無論具體的協(xié)議是對稱的或是非對稱的,當服務被提供時必然存在客戶進程和服務進程。一個服務程序通常在一個眾所周知地地址監(jiān)聽客戶對服務地請求,也就是說,服務進程一直處于休眠狀態(tài),直到一個客戶對這個服務地址提出連接請求。在這個時刻,服務程序被“驚醒”并且為客戶提供服務-對客戶地請求作出適當?shù)姆磻_@一請求/響應的過程可以簡單地用以下圖表表示,雖然基于連接地服務器應用程序時的標準,但有時服務
25、也可以通過數(shù)據(jù)報套接字提供。(6) MFC Windows Socket類Visual C+對眾多的socket函數(shù)進行了封裝,MFC提供的封裝類是:CAsyncSocket和CSocket類,它們使編程工作變得相對簡單尤其是CSocket類:l CAsyncSocket類所提供的唯一的抽象就是將與套接字相聯(lián)系的Windows消息以回調(diào)函數(shù)的形式表示,因此它帶來的唯一方便就是程序員無需自行處理Winsock的I/O模型,而對于如阻塞處理、字節(jié)順序差異以及Unicode等依然負有責任并有靈活的控制權。l CSocket類是CAsyncSocket類的派生類,它提供了對通過Carchive對象使用
26、套接字工作的更高級抽象。CSocket類的使用比CAsynCSocket類更加容易,它繼承了CAsyncSocket類的許多封裝了API的成員函數(shù),并且管理了通信的大多數(shù)方面,這使得用戶從原來不得不使用原始API或者CAsyncSocket類的煩雜的工作中解脫出來。更加重要的是CSocket和Carchive類提供了對于同步操作Carchive對象十分重要的阻塞功能,且CSocket通過與CSocketFile和Carchive一起使用來管理對象數(shù)據(jù)的發(fā)送和接收,使發(fā)送數(shù)據(jù)和操作變得簡單明了。以下使CSocket對象與串行化技術及CSocket類的編程模型。第二章 軟件需求分析一 系統(tǒng)客戶要求
27、需求分析是軟件分析中的一個重要步驟。它的基本任務是要準確地分析出系統(tǒng)應用者的需要,以及系統(tǒng)目標必須具備哪些功能。這些功能必須準確地,完整地體現(xiàn)出用戶的要求根據(jù)網(wǎng)絡應用程序的特點,網(wǎng)絡在線聊天系統(tǒng)應就有即時,快速的特點。服務器端和客戶端應就有不同的功能特性。對于服務器端應能夠正確地建立與客戶端的連接并能正確地斷開,能即時地接收、處理和發(fā)送接收到的數(shù)據(jù)。能及時地通知在線用戶當前好友在線狀況,能夠處理非正常數(shù)據(jù)的能力。對于客戶端應能夠快速地檢查是否能夠連接到服務器端。能正確的獲得和反映當前好友在線情況。能夠正確的與特定好友交流。能及時地接收到服務器端地數(shù)據(jù),并能即時處理數(shù)據(jù),并能將處理結果反映給用戶
28、。服務器端:l 能夠正確地、無沖突地啟動服務器。l 監(jiān)聽指定的端口,等待用戶的連接。l 建立與客戶端的邏輯連接,并能通知其他好友。l 向新進入的好友發(fā)出已上線的好友名單。l 接收客戶端的消息請求,并能正確無誤地處理消息,并能發(fā)出消息到客戶端。l 反映當前在線人數(shù)和在線好友狀況。l 及時地反映發(fā)出地消息和聊天消息。l 當好友斷開與服務器端地連接時,服務器能夠正確地斷開連接,并通知其他用戶。l 當用戶違反聊天系統(tǒng)規(guī)定時,服務器系統(tǒng)管理員能夠斷開與此用戶的連接。l 當服務器關閉時,應通知所有用戶??蛻舳耍簂 能夠正確啟動應用程序,并能向服務器發(fā)出連接請求。l 反映當前好友在線情況。l 能夠向群體或指
29、定好友發(fā)出消息l 能夠及時接收好友發(fā)出消息,并通知用戶。l 能夠正確地斷開與服務器端地的連接。二 系統(tǒng)詳細設計對現(xiàn)行管理業(yè)務進行了詳細調(diào)查研究,了解了系統(tǒng)需求和進行了系統(tǒng)分析與設計工作。對員工進行全面、細致而充分的調(diào)查研究和到生產(chǎn)和管理的現(xiàn)場去,并通過座談、詢問后,自上而下逐步細化的進行了了解,調(diào)查的內(nèi)容涉及到企業(yè)的發(fā)展目標、經(jīng)營管理情況,通過系統(tǒng)流程圖中的部分圖形工具來描述管理業(yè)務活動,進行規(guī)范化說明。流程圖如下:用戶運行客戶端端應用程序用戶名存在,從新填寫填寫用戶姓名 提交到服務器不存在同名,用戶登陸到聊天室,等待好友消息或向好友發(fā)出消息三 系統(tǒng)開發(fā)目標1 實時好友登陸 當好友登陸或離開聊
30、天室,服務器端有能力通知所有其他在線用戶。2 收發(fā)消息同步 當一用戶向其他的好友發(fā)出消息,發(fā)送接收端的用戶應能及時接收到消息。3 服務器關閉通知 當服務器因故障或維護需要暫時關閉,應有通知在線用戶的能力。4 隱私消息模式 當用戶選擇發(fā)送消息為私聊的模式。其他在線用戶不能看到此條消息。四 系統(tǒng)開發(fā)思路盡量采用公司現(xiàn)有的硬件環(huán)境,及先進的管理系統(tǒng)開發(fā)方案,從而達到充分利用公司現(xiàn)有資源,提高系統(tǒng)開發(fā)水平和應用效果的目的。1. 系統(tǒng)應符合員工日常的規(guī)定,滿足公司日常工作需要,并達到操作過程中的直觀、方便、實用、安全等要求。2. 系統(tǒng)采用C/S模型。服務器端和客戶端均使用Visual C+并使用Sock
31、ets模型開發(fā)實現(xiàn)3. 系統(tǒng)采用模塊化程序設計方法,既便于系統(tǒng)功能的各種組合和修改,又便于未參與開發(fā)的技術維護人員補充和維護。五 需求的總結首先,經(jīng)過和用戶的討論將系統(tǒng)要實現(xiàn)的功能列出來。主要模塊有登陸模塊、連接模塊 、發(fā)送消息模塊和接收和處理模塊。其次,對軟件的性能指標的需求。主要有人機界面交互反應時和運行時間限制在 2 秒之內(nèi),系統(tǒng)啟動運行不超過 5 秒,占用內(nèi)存不超過 20M,外存不超過 200M(不包括數(shù)據(jù)庫部分) 。 然后,提出軟件運行的環(huán)境需求。該公司的運行環(huán)境設置為:具有 1GB以上的cpu , 128MB的內(nèi)存, 20GB硬盤規(guī)模的服務器和數(shù)臺普通可連網(wǎng)微機;軟件采用windo
32、ws 2000(服務器)和windows 98以上作為系統(tǒng)和網(wǎng)絡軟件。該軟件的使用對象是公司的管理人員,只要會用一般的微機操作即可。 從數(shù)據(jù)流和數(shù)據(jù)結構出發(fā),逐步細化所有的軟件功能,找出系統(tǒng)各元素之間的聯(lián)系,接口特性和設計上的限制,分析它們是否滿足功能要求,是否合理。在該系統(tǒng)的分析和綜合中,經(jīng)過多次與用戶的交流形成了如下所示的各功能模塊圖如下。發(fā)出添加好友消息發(fā)出好友名單消息發(fā)出傳輸數(shù)據(jù)消息發(fā)出用戶重名消息發(fā)出消息接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請求消息接收消息用戶請求連接在線聊天系統(tǒng)服務器端啟動發(fā)出用戶登陸成功消息發(fā)出聊天室關閉消息發(fā)出好友離開消息服務器端系統(tǒng)功能模塊圖接收消息在線
33、聊天系統(tǒng)服務器端接收客戶端退出消息接收傳輸數(shù)據(jù)消息接收連接請求消息發(fā)出消息發(fā)出好友離開消息發(fā)出聊天室關閉消息發(fā)出好友名單消息發(fā)出傳輸數(shù)據(jù)消息發(fā)出用戶重名消息發(fā)出用戶登陸成功消息客戶端系統(tǒng)功能模塊圖第三章 系統(tǒng)具體實現(xiàn)一 概要設計根據(jù)調(diào)查和研究,得到系統(tǒng)所要處理的數(shù)據(jù)可流程,如圖所示:用戶名存在,從新填寫用戶運行客戶端端應用程序填寫用戶姓名 提交到服務器不存在同名,用戶登陸到聊天室 接收服務器端的在線用戶列表接收好友消息接收好友下線或登陸消息發(fā)送消息給好友客戶端數(shù)據(jù)流圖服務器端正常啟動 等待接收用戶連接信息若消息為用戶登陸,則查看是否后同名用戶登陸 若有,這發(fā)出此用戶已存在消息,否則,發(fā)送登陸成
34、功消息,并發(fā)送在線好友名單,并發(fā)送此用戶名稱給已在線用戶若消息為用戶通訊消息,則轉發(fā)給該接收的用戶若消息為用戶退出消息,這斷開連接,同時發(fā)送其他用戶此用戶退出消息服務器端數(shù)據(jù)流圖二 定義服務器端和客戶端的通信結構及含義struct CMessagechar m_strText200;char from20;char to20;int type;結構體的含義定義如下:type定義to20的含義m_strText20含義to20的含義MSG_FIRST用戶請求建立連接方向由客戶端到服務器端請求建立連接的好友名稱為空為空MSG_SUCCESS建立連接成功方向由服務器端到客戶端建立成功的好友名稱建立成
35、功的好友名稱為空MSG_MESSAGE好友間傳輸?shù)南⒎掌骱涂蛻舳穗p向發(fā)出消息的好友名稱默認接收消息好友名稱聊天內(nèi)容MSG_USER_ADD添加好友名稱消息方向由服務器端到客戶端為空添加的好友名稱為空MSG_USER_REMOVE好友離開時刪除好友名稱方向由服務器到客戶端為空刪除地的好友名稱為空MSG_QUIT_CLIENT客戶端退出消息方向又客戶端到服務器端退出的好友名稱為空為空MSG_QUIT_SERVER客戶端退出消息方向又服務器端到客戶端為空為空為空MSG_RENAME通知用戶此用戶名已存在,應更改用戶名再登陸方向又服務器端到客戶端存在重名的好友名稱空空三 服務器端具體實現(xiàn)服務器端有
36、個CSocket的派生類CListenSocket對象指針來監(jiān)聽端口等待用戶登陸,而用另一個CSocket的派生類對象CClientSocket的指針組來處理和每一個客戶端的交互過程。派生類 CListenSocket的回調(diào)函數(shù)OnAccpet()與客戶端建立套接字層次的連接。派生類CClientSocket的回調(diào)函數(shù)OnReceive()與接收每一個已連接的數(shù)據(jù)傳輸。由于應用Visual C+的MFC編程,應體現(xiàn)View/Document體系結構,所以CListenSocket的OnAccpet和CClientSocket的OnReceive函數(shù)放到應用程序的Document的實現(xiàn)類實現(xiàn),又
37、由于服務器端是基于對話框的應用程序,所以以上兩個函數(shù)的實際處理代碼再工程的主體類CServerDlg的ProcessPendingAccept和ProcessPendingRead來處理工程中的cpp文件及其包含的重要函數(shù):ListenSocket.cpp:(CListenSocket的實現(xiàn)文件)OnAccept(int nErrorCode)ClientSocket.cpp:(CClientSocket的實現(xiàn)文件)OnReceive(int nErrorCode)ServerDlg.cpp:(CServerDlg的實現(xiàn)文件) void InsertListAction(CMessage &a
38、mp;msg,BOOL bDirection = FALSE);用于更新服務器端的消息列表。void NotifyName(LPCTSTR lpszText, int i)用于更新服務器端的在線用戶顯示void OnButtonKick()用于服務器端的管理員斷開與指定用戶的連接void OnInitDialog()用于初始化主窗體對話框,并且建立套接字并綁定端口,和一些界面的初始化工作。void ProcessPendingAccept()處理客戶端和服務器端的連接工作。并將連接的套接字的對象指針保留到數(shù)組中。void ProcessPendingRead()處理客戶端發(fā)送到服務器端的數(shù)據(jù)。
39、并對消息做一定的處理。SendUserNameToClient(CClientSocket *pSocket,CMessage msg)將用戶名稱發(fā)送到指定的套接字對應的用戶UpdateClients(CMessage mmsg, int nBufferSize)將mmsg結構發(fā)送給所有用戶,即模擬廣播發(fā)送CPtrList m_connectionList; 連接到客戶端的套接字指針鏈表CListenSocket * m_pSocket; 監(jiān)聽套接字的對象指針intm_iConnNum;當前連接數(shù)CServerDlg:OnInitDialog()m_pSocket = new CListenS
40、ocket(this);創(chuàng)建監(jiān)聽套接字m_pSocket->Create(1213);綁定本地的1213端口m_pSocket->Listen();開始監(jiān)聽m_pSocket = new CListenSocket(this);創(chuàng)建監(jiān)聽套接字m_pSocket->Create(1213);綁定本地的1213端口m_pSocket->Listen();開始監(jiān)聽分析包的內(nèi)容,并查看是否存在同名用戶CServerDlg:ProcessPendRead()接收客戶端包含的WM_FIRST請求構造包含MSG_USER_ADD的CMessage對象,調(diào)用CSocket->Se
41、nd(),發(fā)送給其他用戶,通知新用戶登陸構造包含MSG_USER_ADD的CMessage對象,調(diào)用CSocket->Send(),發(fā)送給該用戶已進入聊天室的好友名單若存在同名構造包含MSG_RENAME的CMessage對象,調(diào)用CSocket:Send(),通知存在重名CServerDlg:ProcessPendAccept()CListenSocket:OnAccpet()客戶端的請求連接若不存在同名 構造包含MSG_SUCCESS的CMessage對象,調(diào)用CSocket:Send()通知用戶已建立連接服務器端具體的建立連接的過程觸發(fā)退出聊天室退出事件構造包含MSG_QUIT_S
42、ERVER的CMessage的對象,用UpdateClients來使所有連接的客戶端都斷開連接,服務器退出并通知用戶過程接收到數(shù)據(jù)包CClientSocket:OnReceive()調(diào)用CServerDlg:ProcessPendRead()來分析獲得的包的內(nèi)容接收到的包的type為MSG_MESSAGE,則調(diào)用UpdateAllClients來通知所有用戶構造包含MSG_USER_REMOVE的CMessage 對象,并調(diào)用UpdateClients()來通知當前在線好友好友離開接收到的包的type為MSG_QUIT_CLIENT,則將此用戶對應的套接字從套接字鏈表中刪除,并斷開連接服務器端
43、接收到包含MSG_MESSAGE或MSG_QUIT_CLIENT消息的處理過程四 客戶端的實現(xiàn)流圖發(fā)送包含WM_FIRST和用戶名的 CMessage的對象調(diào)用 CClientSocket的 Connect建立連接添加用戶名稱,調(diào)用CClientDlg:ConnectSocket啟動應用程序CClientSocket:OnReceive()接收到數(shù)據(jù)包客戶端的啟動和嘗試建立連接的過程CclientSocketDoc:ProcessPengingRead()包的標志位為MSG_MESSAGE,則處理好友的消息,并顯示包的標志位位MSG_RENAME標記此用戶名稱已被使用,包的標志為MSG_SUCCESS,標記者進入聊天室成功包的標志位為MSG_USER_REMOVE,則將好友名稱從好友列表中刪除包的標志位為MSG_USER_ADD,添加用戶到好友列表包的標志位為MSG_QUIT_SE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 健康社會課課件視頻下載
- 張家界市重點中學2025屆物理高二第二學期期末教學質量檢測試題含解析
- 鼻窺鏡項目可行性研究報告
- 葛洲壩集團退休管理辦法
- 虹口區(qū)冷凍倉庫管理辦法
- 融資性擔保管理暫行辦法
- 街道志愿服務站管理辦法
- 裕安區(qū)健身設施管理辦法
- 西安市雨水泵站管理辦法
- 證券經(jīng)紀業(yè)務管理辦法
- 律所-人才激勵方案(3篇)
- 2025至2030 中國熱成型鋼(PHS)行業(yè)現(xiàn)狀調(diào)查與前景策略研究報告
- 加油站安全生產(chǎn)隱患排查治理制度
- 紅酒禮儀服務培訓課件
- 千川投手培訓課件
- 佛山市2024-2025高一下期末-物理試卷
- 浙江省杭州市2024-2025學年高二下學期6月期末教學質量檢測物理試題(含答案)
- 企業(yè)社會責任管理制度
- 建設工程(更新)融資投資立項項目可行性研究報告(非常詳細)
- 變電站集控系統(tǒng)管理制度
- 人防車位編排方案(3篇)
評論
0/150
提交評論