版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 成人高等教育畢業(yè)設(shè)計(jì)(論文)</p><p> 題 目 局域網(wǎng)聊天軟件 </p><p> 專 業(yè) 計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用專業(yè) </p><p> 班 級 </p><p> 2013
2、 年</p><p><b> 摘 要</b></p><p> 隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,各種各樣基于網(wǎng)絡(luò)的應(yīng)用也隨之誕生,比如基于互聯(lián)網(wǎng)的信息發(fā)布,通信,數(shù)據(jù)共享等等。局域網(wǎng)的發(fā)展也同樣迅速。很多政府機(jī)構(gòu),企業(yè),學(xué)校,都是先以一個(gè)統(tǒng)一的局域網(wǎng)聯(lián)結(jié)在一起,再分別接入INTERNET.因此基于局域網(wǎng)的即時(shí)通信工具,就這樣應(yīng)運(yùn)而生了。所以本文提出了一個(gè)更加合
3、理的設(shè)計(jì),并在WINDOWS平臺上加以了實(shí)現(xiàn).在本實(shí)現(xiàn)內(nèi)將客戶端和服務(wù)端綜合在一個(gè)程序之內(nèi),用多線程實(shí)現(xiàn)不同的并行任務(wù)。并進(jìn)行了人性化的界面設(shè)計(jì),使用起來更加簡單方便,并且功能十分合理,又易于擴(kuò)展以及個(gè)性化定制。</p><p> 在實(shí)際的網(wǎng)絡(luò)環(huán)境里,同一時(shí)間只對一個(gè)用戶服務(wù)是不可行的。一個(gè)優(yōu)秀的網(wǎng)絡(luò)服務(wù)程序除了能處理用戶的輸入信息,還必須能夠同時(shí)響應(yīng)多個(gè)客戶端的連接請求。在Java中,實(shí)現(xiàn)以上功能特點(diǎn)是非常容
4、易的。</p><p><b> 設(shè)計(jì)原理: </b></p><p> 現(xiàn)代互聯(lián)網(wǎng)不僅能給用戶提供諸如搜索和電子郵箱等傳統(tǒng)的信息服務(wù),而且對實(shí)時(shí)通信功能也有較好的支持。常見的實(shí)時(shí)通信軟件都是基于C/S框架,要求客戶端在通信前先聯(lián)入服務(wù)器,才能和其他的聯(lián)入服務(wù)器的用戶進(jìn)行通信。而點(diǎn)對點(diǎn)的通信則無需使用服務(wù)器,對個(gè)客戶端可以直接互相通信,使用更為方便。</p&
5、gt;<p> 主程序監(jiān)聽一端口,等待客戶接入;同時(shí)構(gòu)造一個(gè)線程類,準(zhǔn)備接管會話。當(dāng)一個(gè)Socket會話產(chǎn)生后,將這個(gè)會話交給線程處理,然后主程序繼續(xù)監(jiān)聽。運(yùn)用Thread類或Runnable接口來實(shí)現(xiàn)是不錯(cuò)的辦法。</p><p> 關(guān)鍵詞:局域網(wǎng);即時(shí)通信;客戶端;ServerSocket類;多線程</p><p><b> Abstract</b&
6、gt;</p><p> The Design and Implementation of LAN IM</p><p> Abstract:Along with the high-speed development of the computer network technology, various of applications based on network was born
7、, like information releasing, data sharing ... The development of the LAN is the same fast. Some governments, enterprises and schools constitute a LAN first ,then join into INTERNET. So the instant messenger in LAN was b
8、orned. So I make a new design, and implement it on WINDOWS platform. In my implementation the client and the server were integrated in one program w</p><p> In fact, there is only one service to the user wh
9、ich is not can be used.A good program of network service must can to answer many link request from the client when user input massages. So use JAVA to carry out these functions and particulars are very easy.</p>&
10、lt;p> Design Philosophy:</p><p> Not only could the modern Internet to provide such as search and mail box traditional message service, but the real-time communication function also been well supported
11、.The common software of the real-time communication is base on C/S frame. User should link server, then could communication with others users who also link server. But the real-time communication of point to point is nee
12、dn’t use server, between users whom could immediately communication </p><p> The main program to monitor a port, waiting the user access and constructing a thread class to take over conversation. When the
13、main program product a Socket conversation then take it for the thread to deal with, then the main program continue to monitor. Using the thread class or runnable interface to achieve is a nice method.</p><p&g
14、t; Key words: LAN, instant messaging, client, ServerSocket class, multi thread</p><p><b> 目 錄</b></p><p> 第1章 引 言- 3 -</p><p> 1.1 課題背景及意義- 3 -</p><p&g
15、t; 1.2 課題現(xiàn)狀- 3 -</p><p> 1.3本文的主要工作- 3 -</p><p> 1.4開發(fā)平臺與技術(shù)的選擇及介紹- 3 -</p><p> 1.4.1 開發(fā)環(huán)境的介紹- 3 -</p><p> 1.4.2 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口概述- 3 -</p><p&
16、gt; 1.4.3開發(fā)平臺簡介- 3 -</p><p> 第2章 需求分析及可行性研究- 3 -</p><p> 2.1需求分析- 3 -</p><p> 2.1.1時(shí)間要求- 3 -</p><p> 2.1.2功能要求- 3 -</p><p> 2.1.3系統(tǒng)基本流程圖- 3 -&l
17、t;/p><p> 2.1.4性能要求- 3 -</p><p> 2.1.5測試環(huán)境規(guī)定- 3 -</p><p> 2.2可行性研究- 3 -</p><p> 第3章 相關(guān)開發(fā)技術(shù)的原理性說明- 3 -</p><p> 3.1 win32編程原理及MFC框架- 3 -</p>&l
18、t;p> 3.1.1 WIN32編程原理- 3 -</p><p> 3.1.2 MFC框架- 3 -</p><p> 3.2 TCP/IP 協(xié)議及WINDOWS SOCKETS網(wǎng)絡(luò)編程接口- 3 -</p><p> 3.2.1 TCP/IP協(xié)議簡介- 3 -</p><p> 3.2.2 WINDOWS SOCK
19、ETS網(wǎng)絡(luò)編程接口概述- 3 -</p><p> 3.3多線程編程技術(shù)- 3 -</p><p> 3.3.1進(jìn)程及線程概述- 3 -</p><p> 3.3.2 Win32 API對多線程編程的支持- 3 -</p><p> 第4章 總體設(shè)計(jì)- 3 -</p><p> 4.1體系結(jié)構(gòu)設(shè)計(jì)
20、- 3 -</p><p> 4.2功能模塊劃分- 3 -</p><p> 4.3數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)- 3 -</p><p> 4.4用戶界面設(shè)計(jì)- 3 -</p><p> 4.4.1啟動畫面設(shè)計(jì)- 3 -</p><p> 4.4.2主顯示界面- 3 -</p><p>
21、 4.4.3用戶聊天及接收信息界面- 3 -</p><p> 第5章 詳細(xì)設(shè)計(jì)及編碼實(shí)現(xiàn)- 3 -</p><p> 參考文獻(xiàn)- 3 -</p><p><b> 致謝。- 3 -</b></p><p><b> 第1章 引 言</b></p><p>
22、 1.1 課題背景及意義</p><p> 近年來,隨著全球信息化進(jìn)程的不斷發(fā)展,網(wǎng)絡(luò)也在飛速發(fā)展。出于高效、快速地處理各種事務(wù)的目的,越來越多的企業(yè)在其內(nèi)部使用局域網(wǎng)來進(jìn)行工作。在內(nèi)部局域網(wǎng)的幫助下,企業(yè)得以簡化信息流程,提高信息交換的速度,從而提高工作效率。然而,隨著企業(yè)規(guī)模的擴(kuò)大,業(yè)務(wù)量的增加,在局域網(wǎng)上運(yùn)行的應(yīng)用越來越多,如知識庫、網(wǎng)絡(luò)會議、數(shù)據(jù)庫應(yīng)用和數(shù)據(jù)的同步與備份等,這些應(yīng)用對局域網(wǎng)的信息吞吐、處
23、理能力的要求也越來越高。這些在企業(yè)內(nèi)部原有局域網(wǎng)設(shè)計(jì)之初未曾考慮到的新情況的出現(xiàn)使得局域網(wǎng)不堪重負(fù),容易發(fā)生信息阻塞,此時(shí),局域網(wǎng)不但不能提高生產(chǎn)效率,反而成為企業(yè)發(fā)展的瓶頸。 </p><p> 為了解決上述矛盾,人們提出了許多方法。提升網(wǎng)絡(luò)帶寬及增加服務(wù)器的吞吐能力是解決此矛盾的一種方法。然而,從企業(yè)運(yùn)行的成本方面考慮,無論是單純地提升網(wǎng)絡(luò)帶寬或增加服務(wù)器的吞吐能力都不能從根本上解決局域網(wǎng)資源緊張的問題
24、,對舊有局域網(wǎng)的大規(guī)模硬件改造反而會增加企業(yè)的負(fù)擔(dān)。 </p><p> 我在本文中將討論一種基于Socket的局域網(wǎng)通信工具的設(shè)計(jì)與實(shí)現(xiàn)方法?;赟ocket的局域網(wǎng)通信軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好,安全,快速的通信機(jī)制。它的實(shí)現(xiàn)無需對企業(yè)原有的局域網(wǎng)硬件進(jìn)行任何改動,具有實(shí)現(xiàn)成本低廉的優(yōu)點(diǎn),它的使用能有效地降低局域網(wǎng)通信負(fù)荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。
25、</p><p> 基于Socket的局域網(wǎng)聊天工具是此類局域網(wǎng)通信軟件的具體實(shí)例之一,它很好地詮釋了Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學(xué)、討論等應(yīng)用中都具有一定的實(shí)用價(jià)值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡(luò)帶寬資源低,占用服務(wù)器吞吐能力低,易于編程實(shí)現(xiàn)等優(yōu)點(diǎn)。 </p><p> 基于Socket的局域網(wǎng)通信軟件應(yīng)用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能
26、擴(kuò)展以適應(yīng)新型的網(wǎng)絡(luò)應(yīng)用,如網(wǎng)絡(luò)教育,數(shù)據(jù)影音傳輸?shù)?,擁有廣泛的應(yīng)用前景。 </p><p> 1.2 課題現(xiàn)狀 </p><p> 基于局域網(wǎng)的即時(shí)通信工具,實(shí)際上是互聯(lián)網(wǎng)即時(shí)通信工具的一個(gè)小規(guī)模版本,廣域網(wǎng)上的即時(shí)通信工具,如今一般采用UDP或者 TCP協(xié)議體系來實(shí)現(xiàn) ,開發(fā)技術(shù)已經(jīng)比較成熟,比如較早的ICQ,MSN Messanger,Yahoo 通這些國外開發(fā)的產(chǎn)品,還有國
27、產(chǎn)的有名的QQ,新浪UC,LAVA-LAVA等,這些工具統(tǒng)統(tǒng)都實(shí)現(xiàn)了廣域網(wǎng)上的即時(shí)通信,盡管都是即時(shí)通信,實(shí)現(xiàn)了即時(shí)聊天,以及文件傳輸?shù)闹饕δ?,但是也各有各的特色,比如ICQ的巨大客戶群,MSN的個(gè)性化表情,YAHOO通的易操作性等。而QQ也具有一個(gè)相當(dāng)方便的屏幕截圖功能,另外就是,所有上述軟件都實(shí)現(xiàn)了網(wǎng)絡(luò)即時(shí)的視頻,語音聊天功能。這些軟件,在使用方面各有特色,在實(shí)現(xiàn)方面也各有所長,但基于這些產(chǎn)品正在商業(yè)運(yùn)營階段,其實(shí)現(xiàn)方式屬于商業(yè)機(jī)
28、密,具體細(xì)節(jié)不可能得知,但是它在大的方面無非就是各種利用各種平臺上的網(wǎng)絡(luò)通信接口,建構(gòu)基于下層TCP/IP,或者UDP/IP協(xié)議的軟件產(chǎn)品。在局域網(wǎng)內(nèi),這些功能的實(shí)現(xiàn)跟廣域網(wǎng)相比更加簡單,因?yàn)榫钟蚓W(wǎng)的網(wǎng)絡(luò)結(jié)構(gòu)本身比廣域網(wǎng)要復(fù)雜,但是又可以借些理解網(wǎng)絡(luò)協(xié)議,以及網(wǎng)絡(luò)通信工具的實(shí)現(xiàn)原理,所以仍然極具研究價(jià)值。</p><p> 1.3本文的主要工作</p><p> 本文主要工作是設(shè)計(jì)一個(gè)
29、基于WINDOWS平臺的局域網(wǎng)即時(shí)聊天工具,然后闡述本軟件的功能、特點(diǎn)及使用方法,并詳細(xì)闡述開發(fā)本軟件所用的相關(guān)技術(shù),具體分析本軟件的各個(gè)模塊的功能及實(shí)現(xiàn)方法,說明本軟件的設(shè)計(jì)思想及方法。</p><p> 1.4開發(fā)平臺與技術(shù)的選擇及介紹</p><p> 1.4.1 開發(fā)環(huán)境的介紹</p><p> 我所設(shè)計(jì)的是一個(gè)面向個(gè)人的局域網(wǎng)即時(shí)信息軟件,要在短時(shí)間
30、內(nèi)開發(fā)出來并且要滿足個(gè)人要求,無論是硬件還是軟件都要選擇合適,要求如下:開發(fā)設(shè)備應(yīng)該完備;開發(fā)機(jī)器的性能必須穩(wěn)定;操作系統(tǒng)的選擇必須恬當(dāng);開發(fā)出的程序可以在盡可能多的平臺上運(yùn)行;要求運(yùn)行機(jī)配置盡可能低檔。對此,我們選擇的硬件環(huán)境和軟件環(huán)境如下: </p><p> (1) 硬件環(huán)境 </p><p> 開發(fā)該系統(tǒng)應(yīng)盡可能采用高檔的硬件。因此,在應(yīng)用時(shí)應(yīng)采用更好的配置。 &l
31、t;/p><p> 處理器:Intel Pentium PIII或更高處理器。 </p><p> 內(nèi)存:128MB或更高。 </p><p> 網(wǎng)絡(luò):局域網(wǎng)。 </p><p> (2) 軟件環(huán)境 </p><p> 選擇好的操作系統(tǒng)和好的編程語言是系統(tǒng)優(yōu)劣的關(guān)鍵,我們要求系統(tǒng)在盡
32、可能多的環(huán)境下運(yùn)行,故選擇Windows XP平臺,對于一些無法在98中運(yùn)行的API函數(shù),一律不采用,并采取優(yōu)化的算法編寫程序。因VC6.0具有友好的集成開發(fā)界面、面向?qū)ο蟮目梢暬_發(fā)模式、良好的數(shù)據(jù)庫及多媒體應(yīng)用支持以及高效的軟件開發(fā)與程序運(yùn)行,功能更大,開發(fā)效率更高,不僅是網(wǎng)絡(luò)環(huán)境下的優(yōu)秀前端開發(fā)語言和工具,也是服務(wù)器端Web編程的優(yōu)秀工具。加之我本人對本系統(tǒng)的操作最為熟練,所以選擇該平臺為開發(fā)環(huán)境。 </p>&l
33、t;p> 操作系統(tǒng):Windows XP、Window Vista或Windows 7。 </p><p> 開發(fā)工具:My Eclipse</p><p> 1.4.2 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口概述</p><p> 既然選定了WINDOWS平臺,而又要開發(fā)網(wǎng)絡(luò)通信程序,所以可以選擇WINDOWS的SOCKETS編程接口,Win
34、dows Sockets是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),我們可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。Winsockets無疑是我們進(jìn)行網(wǎng)絡(luò)編程的利器。</p><p> 1.4.3開發(fā)平臺簡介</p><p> Java,是由Sun Microsystems公司于1995年5
35、月推出的Java程序設(shè)計(jì)語言和Java平臺的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計(jì)算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。</p><p> Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的動態(tài)語言。
36、</p><p> JAVA的主要特性:</p><p> ?、臞ava語言是簡單的</p><p> Java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用Java。另一方面,Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強(qiáng)制類型轉(zhuǎn)換。特別地,Java語言不使用指針,并提供了自動的廢料收
37、集,使得程序員不必為內(nèi)存管理而擔(dān)憂。</p><p> ?、艼ava語言是一個(gè)面向?qū)ο蟮?lt;/p><p> Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語言全面支持動態(tài)綁定,而C++ 語言只對虛函數(shù)使用動態(tài)綁定??傊?,Java語言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。&l
38、t;/p><p> ?、荍ava語言是分布式的</p><p> Java語言支持Internet應(yīng)用的開發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java.net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。</p>&l
39、t;p> ⑷Java語言是健壯的</p><p> Java的強(qiáng)類型機(jī)制、異常處理、廢料的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。</p><p> ?、蒍ava語言是安全的</p><p> Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊
40、。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡(luò)下載的類具有一個(gè)安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機(jī)制(類SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。 </p><p> ?、蔎ava語言是體系結(jié)構(gòu)中立的</p><p> Java程序(后綴為java的文件)在Java平臺上被編譯為
41、體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實(shí)現(xiàn)這個(gè)Java平臺的任何系統(tǒng)中運(yùn)行。這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。 </p><p> ⑺Java語言是可移植的</p><p> 這種可移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用
42、ANSI C實(shí)現(xiàn)的。</p><p> ?、蘆ava語言是解釋型的</p><p> 如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式, 然后可以在實(shí)現(xiàn)這個(gè)Java平臺的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺中的Java解釋器對這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運(yùn)行環(huán)境中。</p><p> ?、蚃ava是高性能的</p&g
43、t;<p> 與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來越接近于C++。 </p><p> ?、蜫ava語言是多線程的</p><p> 在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為Threa
44、d(Runnable) 的構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對象包裝成一個(gè)線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注意的是Thread類已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動由一組方法來控制。 Java語言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。<
45、/p><p> ?、螶ava語言是動態(tài)的</p><p> Java語言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運(yùn)行環(huán)境,也可以通過網(wǎng)絡(luò)來載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類型檢查。</p><p> 第2章 需求分析及可行性研究</p><p>
46、;<b> 2.1需求分析</b></p><p><b> 2.1.1時(shí)間要求</b></p><p> 本項(xiàng)目作為大學(xué)本科畢業(yè)設(shè)計(jì)題目,從3月5號接受選題開始,在4月10號之前最終完成論文。</p><p><b> 2.1.2功能要求</b></p><p>&l
47、t;b> 這個(gè)程序要實(shí)現(xiàn)</b></p><p> 程序啟動之后就能看到當(dāng)前哪些機(jī)器在線,哪些可以與之進(jìn)行對等通信。</p><p> 一旦有某個(gè)網(wǎng)內(nèi)的機(jī)器上線了,要有即時(shí)通知,并能及時(shí)更新用戶界面中的用戶列表。</p><p> 當(dāng)雙擊某個(gè)列表項(xiàng)的時(shí)候,要彈出聊天對話框,可以在其中編輯要發(fā)送的聊天信息,并進(jìn)行發(fā)送。</p>
48、<p><b> 聊天界面要人性化。</b></p><p> (5)當(dāng)有人向我發(fā)送信息的時(shí)候,要彈出一個(gè)對話框,顯示用戶接收到的信息,并且知道是誰人所發(fā),并且在當(dāng)前對話框內(nèi)進(jìn)行信息的回復(fù)。</p><p> 2.1.3系統(tǒng)基本流程圖</p><p> 圖2-1 局域網(wǎng)聊天系統(tǒng)的系統(tǒng)流程圖</p><p&g
49、t;<b> 2.1.4性能要求</b></p><p> 首先要求程序要完全可靠,可以應(yīng)付種種由于系統(tǒng)問題產(chǎn)生的錯(cuò)誤,比如初始網(wǎng)絡(luò)失敗,對方突然下線等。要求提前設(shè)想到類似的盡可能多的可能發(fā)生的事件,做出相應(yīng)的應(yīng)對措施,并向用戶提交簡單易懂清晰明白的提示信息。</p><p> 程序要有良好的容錯(cuò)性,當(dāng)用戶進(jìn)行非法操作時(shí)或者系統(tǒng)本身出現(xiàn)問題時(shí)要能以最好的方式退出
50、程序,避免發(fā)生程序假死現(xiàn)象。</p><p> 開發(fā)文檔要有好的易理解性,如果系統(tǒng)又要交由別人接手開發(fā),或者自己由于種種原因需要進(jìn)行二次開發(fā),那么要保證以后能夠清晰的理解整個(gè)系統(tǒng)的設(shè)計(jì)思路以及實(shí)現(xiàn)細(xì)節(jié)。</p><p> 要求程序?qū)λ\(yùn)行之系統(tǒng)的硬件條件要求盡可能低,運(yùn)行時(shí)內(nèi)存占用盡可能小,響應(yīng)速度要盡可能快。并且不發(fā)生內(nèi)存泄漏之類影響系統(tǒng)運(yùn)行的錯(cuò)誤事件。并且要求易于維護(hù)及擴(kuò)展。所以應(yīng)
51、該采用模塊化開發(fā),各個(gè)模塊之間不要有太多的聯(lián)系,以免維護(hù)困難。</p><p> 2.1.5測試環(huán)境規(guī)定</p><p> 在開發(fā)過程中由開發(fā)人員自己,也就是我本人隨時(shí)進(jìn)行內(nèi)部部分白盒測試,在開發(fā)完成以后,自己進(jìn)行一個(gè)全面的白盒測試,然后請同學(xué)幫忙進(jìn)行黑盒測試。</p><p><b> 2.2可行性研究</b></p>&
52、lt;p> ?。?)成本可行性分析</p><p> 因?yàn)楸拒浖蛔鲩_發(fā)學(xué)習(xí)使用,所以暫且不考慮經(jīng)濟(jì)成本及盈利問題。</p><p> ?。?)技術(shù)可行性分析</p><p> 首先我已經(jīng)搭建好開發(fā)所需要的軟硬件平臺,并進(jìn)行了合理而完善的需求分析,做好了充分的前期準(zhǔn)備工作,其次因?yàn)楸境绦虻钠脚_將基于WINDOWS,將要使用網(wǎng)絡(luò)通信技術(shù),而WINDOWS有完
53、善成熟的網(wǎng)絡(luò)通信接口,以及與JAVA開發(fā)環(huán)境的嚴(yán)密契合能力,加之相類似的更大規(guī)模的INTERNET通信工具產(chǎn)品也已有例在先,所以這個(gè)程序的開發(fā)可行性在技術(shù)上是完全可行的。</p><p> 第3章 相關(guān)開發(fā)技術(shù)的原理性說明</p><p> 3.1 win32編程原理及MFC框架</p><p> 3.1.1 WIN32編程原理</p><
54、p> 所謂的Win32開發(fā),就是在C語言的層面上,直接使用Win32 API開發(fā)Windows應(yīng)用程序或者系統(tǒng)程序。雖說現(xiàn)在直接用Win32 API開發(fā)應(yīng)用程序的人已經(jīng)不多了,但是深入理解Windows系統(tǒng)程序設(shè)計(jì)原理,仍然是成為Windows開發(fā)高手的良好途徑。所謂的Win32,其實(shí)是一個(gè)API規(guī)范,與UNIX系統(tǒng)編程接口標(biāo)準(zhǔn)POSIX是相對應(yīng)的。下面是進(jìn)行直接的WIN32 SDK方式編程的基本思路或者說是一個(gè)框架:</
55、p><p> 一個(gè)WINDOWS程序分為程序代碼和UI(User Interface 用戶接口)資源兩大部份,兩部份最后以RC編譯程序整合為一個(gè)完整的EXE文件。所謂UI資源是指功能菜單、對話框、程序圖標(biāo)、光標(biāo)形狀等等東西。這些UI資源的實(shí)際內(nèi)容(二進(jìn)制代碼)系借助各種工具產(chǎn)生,并以各種擴(kuò)展名存在,如 .ico .bmp .cur等等。程序員必須在一個(gè)所謂的資源描述檔(.rc )中描述它們。RC編譯器( RC.EX
56、E )讀取RC 文件的描述后將所有UI資源文件集中制作出一個(gè).RES 文件,再與程序代碼結(jié)合在一起,這才是一個(gè)完整的 Windows可執(zhí)行文件。</p><p> 與控制臺程序相同的是,一個(gè)WIN32程序也必須有一個(gè)程序入口點(diǎn),但是在這兒它不再叫main(),而叫做WinMain(),當(dāng)WINDOWS的SHELL檢測到用戶欲執(zhí)行一個(gè)EXE程序,就會調(diào)用加載器把程序進(jìn)行加載,然后調(diào)用C startup code,
57、后者再調(diào)用WinMain(),程序的執(zhí)行就開始了,WinMain()函數(shù)的原型為:int CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);</p><p> 下面程序必須進(jìn)行必要的初始化工作-產(chǎn)生窗口,第一步是注冊一個(gè)窗口類:用API函數(shù):RegisterClass(),而這個(gè)
58、函數(shù)需要一個(gè)已經(jīng)定義好的系統(tǒng)結(jié)構(gòu):WNDCLASS,這個(gè)結(jié)構(gòu)里面定義了窗口的種種屬性,需要自己定義,但是許多屬性都有默認(rèn)值。然后調(diào)用CreateWindow()函數(shù)來產(chǎn)生具有上述定義屬性的已注冊窗口,但是需要注意的是它只是生成窗口,但并不顯示之,所以還需要調(diào)用一個(gè)函數(shù)ShowWindow()將它顯示在屏幕上,做完這些初始化工作以后,系統(tǒng)將進(jìn)入消息循環(huán):</p><p> while (GetMessage(&a
59、mp;msg, NULL, 0, 0)){</p><p> TranslateMessage(&msg);</p><p> DispatchMessage(&msg);}</p><p> 當(dāng)消息循環(huán)捕捉到消息以后將交由窗口函數(shù)WndProc()窗口函數(shù)進(jìn)行相應(yīng)的處理。這樣,一個(gè)基于消息事件驅(qū)動的WIN32程序的雛形就建立了起來。</
60、p><p> 3.1.2 MFC框架</p><p> 由上面的介紹可以看出,直接用API函數(shù)開發(fā)一個(gè)WIN32程序是相當(dāng)麻煩的,有好多既定的重復(fù)性的工作要做,所以微軟就用C++的類機(jī)制將絕大部分的API函數(shù)進(jìn)行了封裝,構(gòu)成了類,并且將基本的流程也封裝在類機(jī)制下面,大大簡化了WIN32開的的復(fù)雜性,尤其是在開發(fā)比較大型程序的時(shí)候這個(gè)便宜性更會得以體現(xiàn)。它就是Microsoft Founda
61、tion Classes,簡稱為MFC。MFC構(gòu)架了一個(gè)龐大的類體系結(jié)構(gòu),在4.0時(shí)代就多達(dá)189個(gè)類,程序代碼達(dá)252個(gè)文件,58個(gè)頭文件,共10MB之多,MFC4.2時(shí)又多加了29個(gè)類,但是最為主干的是下面類結(jié)構(gòu)示圖3-2所示的一些類: </p><p> 圖3-2 MFC類框架主體</p><p> 構(gòu)建一個(gè)基于MFC框架的程序,可以使用MFC的向?qū)С绦?,但首先要明白,一個(gè)基于M
62、FC的程序可以有幾種類型:基于單文檔結(jié)構(gòu)的程序,基于多文檔結(jié)構(gòu)的程序以及基于對話框的應(yīng)用程序,不同類型的程序具有不同的程序?qū)傩浴J褂闷湎驅(qū)б约翱丶幊?,使得不論是界面編寫,還是程序內(nèi)核設(shè)計(jì),都更加的簡單。其中有合理的消息映射機(jī)制,有方便的運(yùn)行時(shí)類型識別功能,更有文檔/視圖結(jié)構(gòu)設(shè)計(jì),文檔串行化功能等非常多的優(yōu)秀功能。</p><p> 3.2 TCP/IP 協(xié)議及WINDOWS SOCKETS網(wǎng)絡(luò)編程接口<
63、/p><p> 3.2.1 TCP/IP協(xié)議簡介</p><p> TCP/IP協(xié)議實(shí)際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。其中TCP是提供傳輸層服務(wù),而IP則是提供網(wǎng)絡(luò)層服務(wù)。TCP/IP主要包括以下協(xié)議:</p><p> IP:網(wǎng)間協(xié)議(Internet Protocol) 負(fù)責(zé)主機(jī)間數(shù)據(jù)的路由和網(wǎng)絡(luò)上數(shù)據(jù)的存儲。同時(shí)為ICMP,TCP,UDP提供分組發(fā)送
64、服務(wù)。用戶進(jìn)程通常不需要涉及這一層。</p><p> ICMP:網(wǎng)間報(bào)文控制協(xié)議(Internet Control Message Protocol),此協(xié)議處理網(wǎng)關(guān)和主機(jī)的差錯(cuò)和傳送控制。</p><p> TCP: 傳輸控制協(xié)議(Transmission Control Protocol),這是一種提供給用戶進(jìn)程的可靠的全雙工字節(jié)流面向連接的協(xié)議。它要為用戶進(jìn)程提供虛電路服務(wù),并
65、為數(shù)據(jù)可靠傳輸建立檢查。</p><p> TCP/IP協(xié)議的核心部分是傳輸層協(xié)議(TCP、UDP),網(wǎng)絡(luò)層協(xié)議(IP)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)。因此用戶一般不涉及。編程時(shí),</p><p> 編程界面有兩種形式:</p><p> 一、是由內(nèi)核直接提供的系統(tǒng)調(diào)用;</p><p> 二、使用以庫函數(shù)方式提供的各
66、種函數(shù)。前者為核內(nèi)實(shí)現(xiàn),后者為核外實(shí)現(xiàn)。用戶服務(wù)要通過核外的應(yīng)用程序才能實(shí)現(xiàn),所以要使用套接字(socket)來實(shí)現(xiàn)。</p><p> 因?yàn)樵诒驹O(shè)計(jì)中使用了ICMP協(xié)議進(jìn)行掃描局域網(wǎng)功能的實(shí)現(xiàn),所以對ICMP進(jìn)行進(jìn)一步描述:</p><p> IP協(xié)議是一種不可靠的協(xié)議,無法進(jìn)行差錯(cuò)控制。但I(xiàn)P協(xié)議可以借助其他協(xié)議來實(shí)現(xiàn)這一功能,ICMP就是其中最常用的協(xié)議之一。ICMP(Inter
67、net Control Messages Protocol, 網(wǎng)間控制報(bào)文協(xié)議)允許主機(jī)或路由器報(bào)告差錯(cuò)情況和提供有關(guān)異常情況的報(bào)告。一般來說,ICMP報(bào)文提供針對網(wǎng)絡(luò)層的錯(cuò)誤診斷、擁塞控制、路徑控制和查詢服務(wù)四項(xiàng)大的功能。如,當(dāng)一個(gè)分組無法到達(dá)目的站點(diǎn)或TTL超時(shí)后,路由器就會丟棄此分組,并向源站點(diǎn)返回一個(gè)目的站點(diǎn)不可到達(dá)的ICMP報(bào)文。ICMP報(bào)文大體可以分為兩種類型,即ICMP差錯(cuò)報(bào)文和ICMP詢問報(bào)文。但細(xì)分又可分為很多類型,如
68、圖3-3所示:</p><p> 圖3-3 ICMP報(bào)文類型圖</p><p> ICMP報(bào)文被封裝在IP數(shù)據(jù)報(bào)內(nèi)部傳輸。如下圖3-4所示,是ICMP回射請求和應(yīng)答報(bào)文頭部格式。各種ICMP報(bào)文的前32bits都一樣,它們是:8bits類型和8bits代碼字段:一起決定了ICMP報(bào)文的類型。常見的有:類型8、代碼0:回射請求。類型0、代碼0:回射應(yīng)答。類型11、代碼0:超時(shí)。16bit
69、s校驗(yàn)和字段:包括數(shù)據(jù)在內(nèi)的整個(gè)ICMP數(shù)據(jù)包的校驗(yàn)和,其計(jì)算方法和IP頭部校驗(yàn)和的計(jì)算方法是一樣的。</p><p> 圖3-4 ICMP回射請求和應(yīng)答報(bào)文頭部格式</p><p> 對于ICMP回射請求和應(yīng)答報(bào)文來說,接下來是16bits標(biāo)識符字段:用于標(biāo)識本ICMP進(jìn)程。最后是16bits序列號字段:用于判斷回射應(yīng)答數(shù)據(jù)報(bào)。</p><p> 下面是IC
70、MP不可到達(dá)報(bào)文的頭部格式:</p><p> 圖3-5 ICMP不可到達(dá)報(bào)文頭部格式</p><p> 下面是ICMP超時(shí)報(bào)文的頭部格式:</p><p> 圖3-6 ICMP超時(shí)報(bào)文頭部格式</p><p> 由于篇幅有限,這里不再分析其他類型ICMP協(xié)議數(shù)據(jù)包的格式。</p><p> 簡略的說,ICM
71、P協(xié)議消息包含永遠(yuǎn)不會變化的三個(gè)字段,隨后是ICMP數(shù)據(jù),然后是引發(fā)此消息的源IP數(shù)據(jù)包包頭。不會變化的三個(gè)字段中,前8個(gè)字節(jié)包含ICMP類型(主要類型)、第二個(gè)字段包含了類型代碼、第三個(gè)字段是ICMP消息校驗(yàn)值。</p><p> 我們需要認(rèn)識到,ICMP協(xié)議在某些情況下不會發(fā)送錯(cuò)誤信息。ICMP不會對ICMP信息做出響應(yīng)。如果ICMP回應(yīng)其它ICMP消息,這些消息的數(shù)量會爆炸性增長而演變?yōu)橐粓鯥CMP消息風(fēng)
72、暴。為了防止出現(xiàn)廣播風(fēng)暴,ICMP消息也不會回應(yīng)一個(gè)廣播或者多播地址。</p><p> 最有用的ICMP數(shù)據(jù)包類型“目標(biāo)不可達(dá)”(類型三)的消息。錯(cuò)誤消息一般由路由器生成,并且發(fā)送給數(shù)據(jù)包的來源。大多數(shù)錯(cuò)誤信息還將發(fā)送給與發(fā)送的數(shù)據(jù)包有關(guān)的應(yīng)用程序。在這種情況下,TCP協(xié)議將廣泛使用ICMP協(xié)議。</p><p> 在本設(shè)計(jì)當(dāng)中就是使用了ICMP來實(shí)現(xiàn)了一個(gè)PING功能,來檢測局域網(wǎng)
73、上的哪些機(jī)器當(dāng)前處于可以到達(dá)狀態(tài)的,ICMP回射請求和ICMP回射應(yīng)答報(bào)文是配合工作的。當(dāng)源主機(jī)向目標(biāo)主機(jī)發(fā)送了ICMP回射請求數(shù)據(jù)包后,它期待著目標(biāo)主機(jī)的回答。目標(biāo)主機(jī)在收到一個(gè)ICMP回射請求數(shù)據(jù)包后,它會交換源、目的主機(jī)的地址,然后將收到的ICMP回射請求數(shù)據(jù)包中的數(shù)據(jù)部分原封不動地封裝在自己的ICMP回射應(yīng)答數(shù)據(jù)包中,然后發(fā)回給發(fā)送ICMP回射請求的一方。如果校驗(yàn)正確,發(fā)送者便認(rèn)為目標(biāo)主機(jī)的回射服務(wù)正常,也即物理連接暢通。<
74、;/p><p> 綜上所述,只要網(wǎng)路之間能支持 IP ,那就可透過 ICMP 進(jìn)行錯(cuò)誤偵測與回報(bào)。如果要查看具體的細(xì)節(jié)情況,可以查閱RFC文件,與ICMP相關(guān)的文件有:RFC-792﹑RFC-896﹑RFC-950等。</p><p> 3.2.2 WINDOWS SOCKETS網(wǎng)絡(luò)編程接口概述</p><p> 在網(wǎng)絡(luò)編程中最常用的方案便是Client/Serv
75、er (客戶機(jī)/服務(wù)器)模型。在這種方案中客戶應(yīng)用程序向服務(wù)器程序請求服務(wù)。一個(gè)服務(wù)程序通常在一個(gè)眾所周知的地址監(jiān)聽對服務(wù)的請求,也就是說,服務(wù)進(jìn)程一直處于休眠狀態(tài),直到一個(gè)客戶向這個(gè)服務(wù)的地址提出了連接請求。在這個(gè)時(shí)刻,服務(wù)程序被"驚醒"并且為客戶提供服務(wù)-對客戶的請求作出適當(dāng)?shù)姆磻?yīng)。</p><p> 為了方便這種Client/Server模型的網(wǎng)絡(luò)編程,90年代初,由Microsoft
76、聯(lián)合了其他幾家公司共同制定了一套WINDOWS下的網(wǎng)絡(luò)編程接口,即Windows Sockets規(guī)范,它不是一種網(wǎng)絡(luò)協(xié)議,而是一套開放的、支持多種協(xié)議的Windows下的網(wǎng)絡(luò)編程接口?,F(xiàn)在的Winsock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無關(guān),你可以使用Winsock來調(diào)用多種協(xié)議的功能,但較常使用的是TCP/IP協(xié)議。</p><p> Socket實(shí)際在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過這個(gè)端口與任何一個(gè)具有Sock
77、et接口的計(jì)算機(jī)通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過這個(gè)Socket接口來實(shí)現(xiàn)。如下圖3-7所示: </p><p> 圖3-7 面向連接的套接字的系統(tǒng)調(diào)用時(shí)序圖</p><p> 3.3多線程編程技術(shù)</p><p> 3.3.1進(jìn)程及線程概述</p><p> 進(jìn)程和線程都是操作系統(tǒng)的概念。進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例,每
78、個(gè)進(jìn)程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其它各種系統(tǒng)資源組成,進(jìn)程在運(yùn)行過程中創(chuàng)建的資源隨著進(jìn)程的終止而被銷毀,所使用的系統(tǒng)資源在進(jìn)程終止時(shí)被釋放或關(guān)閉。</p><p> 線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行單元。系統(tǒng)創(chuàng)建好進(jìn)程后,實(shí)際上就啟動執(zhí)行了該進(jìn)程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動點(diǎn)提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進(jìn)程也就隨之終止。</p&
79、gt;<p> 每一個(gè)進(jìn)程至少有一個(gè)主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應(yīng)用程序中創(chuàng)建其它線程,多個(gè)線程并發(fā)地運(yùn)行于同一個(gè)進(jìn)程中。一個(gè)進(jìn)程中的所有線程都在該進(jìn)程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術(shù)的應(yīng)用也較為廣泛。</p><p> 多線程可以實(shí)現(xiàn)并行處理,避免了某項(xiàng)任務(wù)長時(shí)間占用CPU時(shí)間。要說明
80、的一點(diǎn)是,目前大多數(shù)的計(jì)算機(jī)都是單處理器(CPU)的,為了運(yùn)行所有這些線程,操作系統(tǒng)為每個(gè)獨(dú)立線程安排一些CPU時(shí)間,操作系統(tǒng)以輪換方式向線程提供時(shí)間片,這就給人一種假象,好象這些線程都在同時(shí)運(yùn)行。由此可見,如果兩個(gè)非?;钴S的線程為了搶奪對CPU的控制權(quán),在線程切換時(shí)會消耗很多的CPU資源,反而會降低系統(tǒng)的性能。這一點(diǎn)在多線程編程時(shí)應(yīng)該注意。</p><p> Win32 SDK函數(shù)支持進(jìn)行多線程的程序設(shè)計(jì),并
81、提供了操作系統(tǒng)原理中的各種同步、互斥和臨界區(qū)等操作。Visual C++ 6.0中,使用MFC類庫也實(shí)現(xiàn)了多線程的程序設(shè)計(jì),使得多線程編程更加方便。</p><p> 3.3.2 Win32 API對多線程編程的支持</p><p> Win32 提供了一系列的API函數(shù)來完成線程的創(chuàng)建、掛起、恢復(fù)、終結(jié)以及通信等工作。下面將選取其中的一些重要函數(shù)進(jìn)行說明。 </p>&
82、lt;p> (1) HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,</p><p> DWORD dwStackSize,</p><p> LPTHREAD_START_ROUTINE lpStartAddress,</p><p> LPVOID lpParameter,&
83、lt;/p><p> DWORD dwCreationFlags,</p><p> LPDWORD lpThreadId);</p><p> 該函數(shù)在其調(diào)用進(jìn)程的進(jìn)程空間里創(chuàng)建一個(gè)新的線程,并返回已建線程的句柄。</p><p> (2) DWORD SuspendThread(HANDLE hThread);</p>
84、<p> 該函數(shù)用于掛起指定的線程,如果函數(shù)執(zhí)行成功,則線程的執(zhí)行被終止。</p><p> (3) DWORD ResumeThread(HANDLE hThread);</p><p> 該函數(shù)用于結(jié)束線程的掛起狀態(tài),執(zhí)行線程。 </p><p> (4) VOID ExitThread(DWORD dwExitCode);</p>
85、<p> 該函數(shù)用于線程終結(jié)自身的執(zhí)行,主要在線程的執(zhí)行函數(shù)中被調(diào)用。其中參數(shù)dwExitCode用來設(shè)置線程的退出碼。 </p><p> (5) BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);</p><p> 一般情況下,線程運(yùn)行結(jié)束之后,線程函數(shù)正常返回,但是應(yīng)用程序可以調(diào)用TerminateThre
86、ad強(qiáng)行終止某一線程的執(zhí)行。</p><p> 使用TerminateThread()終止某個(gè)線程的執(zhí)行是不安全的,可能會引起系統(tǒng)不穩(wěn)定;雖然該函數(shù)立即終止線程的執(zhí)行,但并不釋放線程所占用的資源。因此,一般不建議使用該函數(shù)。 </p><p> (6) BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam,LPARAM
87、 lParam);</p><p> 該函數(shù)將一條消息放入到指定線程的消息隊(duì)列中,并且不等到消息被該線程處理時(shí)便返回。</p><p> 調(diào)用該函數(shù)時(shí),如果即將接收消息的線程沒有創(chuàng)建消息循環(huán),則該函數(shù)執(zhí)行失敗。</p><p><b> 第4章 總體設(shè)計(jì)</b></p><p><b> 4.1體系結(jié)構(gòu)
88、設(shè)計(jì)</b></p><p> 通常的通信工具,都采用客戶機(jī)/服務(wù)器(C/S)體系結(jié)構(gòu),C/S結(jié)構(gòu)是這樣的一種結(jié)構(gòu):它包括一個(gè)客戶機(jī)(或前端),一個(gè)服務(wù)器(或稱后端),客戶機(jī)的作用是訪問和處理遠(yuǎn)程服務(wù)器上的數(shù)據(jù),服務(wù)器的作用是接收和處理客戶機(jī)的數(shù)據(jù)請求。有時(shí),可能有多個(gè)客戶向同一個(gè)服務(wù)器同時(shí)請求服務(wù),這就需要服務(wù)器決定怎樣處理這些請求。Client/Server結(jié)構(gòu)是當(dāng)前數(shù)據(jù)庫應(yīng)用程序中極為流行的一
89、種方式。尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造,其最大的優(yōu)點(diǎn)是將計(jì)算機(jī)工作任務(wù)分別由客戶端和服務(wù)器端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務(wù)器端還可以將信息集中起來,任何客戶機(jī)都可以通過訪問服務(wù)器而獲得所需的信息。Client/Server模型最終可歸結(jié)為一種“請求/應(yīng)答”關(guān)系。一個(gè)請求總是首先被客戶發(fā)出,然后服務(wù)器總是被動地接收請求,返回客戶需要的結(jié)果。在客戶發(fā)出一個(gè)請求之前,服務(wù)進(jìn)程一直處于休
90、眠狀態(tài)。一個(gè)客戶提出請求后,服務(wù)進(jìn)程被“喚醒”并且為客戶提供服務(wù),對客戶的請求做出所需要的應(yīng)答。</p><p> 圖4-1客戶機(jī)/服務(wù)器通信結(jié)構(gòu)示圖</p><p> 但是具體到現(xiàn)在這個(gè)項(xiàng)目,如果要做成C/S結(jié)構(gòu),需要在局域網(wǎng)內(nèi)架設(shè)一個(gè)服務(wù)器,而在一個(gè)局域網(wǎng)中,如果網(wǎng)絡(luò)結(jié)構(gòu)不是集中式的而是分散式的,那么可能沒有一臺機(jī)器來充當(dāng)服務(wù)器這個(gè)角色,比如我們的校園宿舍網(wǎng)絡(luò)就是如此。所以說,我的
91、設(shè)計(jì)是每個(gè)程序自己既充當(dāng)客戶機(jī)又充當(dāng)服務(wù)器,自己維護(hù)網(wǎng)絡(luò)上的客戶機(jī)列表,每兩個(gè)客戶端要進(jìn)行連結(jié)時(shí)都直接連通而不用通過服務(wù)器來進(jìn)行信息的中轉(zhuǎn),這樣雖然損失了一些性能各帶寬資源,但是對通信量不是很大的局域網(wǎng),這點(diǎn)損失可以由換得的專門架設(shè)服務(wù)器的優(yōu)點(diǎn)來彌補(bǔ)。所以,系統(tǒng)結(jié)構(gòu)將設(shè)計(jì)成如下方式:</p><p> 當(dāng)然,上述圖示只是通信數(shù)據(jù)的一個(gè)流向示意圖,不是真正的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),也就是說其中的服務(wù)器可能只是裝了服務(wù)器軟件
92、的一臺普通工作站。在底層的數(shù)據(jù)流向中,也就是網(wǎng)絡(luò)的物理連結(jié),并非我們這個(gè)軟件所能決定的,我們的所做都是在一個(gè)透明的數(shù)據(jù)通信層之上的。</p><p><b> 4.2功能模塊劃分</b></p><p> 因?yàn)樵诒鞠到y(tǒng)中,每一個(gè)客戶端系統(tǒng)都是相同的也就是具體到通信雙方而言其實(shí)是對稱的,所以只需要考慮一個(gè)系統(tǒng)就可以了。</p><p> 根
93、據(jù)以上的系統(tǒng)需求分析,以及體系結(jié)構(gòu)設(shè)計(jì),可以對系統(tǒng)進(jìn)行如下劃分(如功能模塊劃分如圖4-3所示)。其中主線程模塊完成對網(wǎng)絡(luò)的初始化,然后啟動兩個(gè)子線程:服務(wù)端監(jiān)聽線程以及網(wǎng)絡(luò)掃描模塊線程,然后由網(wǎng)絡(luò)掃描模塊得到當(dāng)前的網(wǎng)絡(luò)用戶分布情況,并填充相關(guān)的數(shù)據(jù)結(jié)構(gòu),然后生成用戶列表界面顯示給用戶。</p><p> 通信模塊又包括兩個(gè)子模塊:數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊,這兩個(gè)模塊都由系統(tǒng)定義的網(wǎng)絡(luò)事件來觸發(fā)。</p&
94、gt;<p> 輸入/輸出模塊用來響應(yīng)用戶雙擊用戶列表的某一項(xiàng)要準(zhǔn)備發(fā)送信息時(shí)的消息,以及當(dāng)系統(tǒng)接收到某個(gè)網(wǎng)絡(luò)用戶發(fā)送來的消息,要將其顯示給用戶的時(shí)候網(wǎng)絡(luò)掃描模塊是由主線程模塊啟動,進(jìn)行網(wǎng)絡(luò)掃描,確定哪些用戶當(dāng)前處于可到達(dá)狀態(tài),以及哪些可到達(dá)狀態(tài)的用戶安裝有相應(yīng)的通信軟件,并啟動之可以與之進(jìn)行通信。</p><p> 圖4-2 功能模塊劃分示圖</p><p> 我覺得
95、這樣的模塊劃分設(shè)計(jì)符合強(qiáng)內(nèi)聚,弱耦合的原則,并且易于實(shí)現(xiàn)。</p><p><b> 4.3數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p> 由于系統(tǒng)首先要維護(hù)一個(gè)網(wǎng)絡(luò)用戶列表,所以要設(shè)計(jì)一個(gè)數(shù)組。這個(gè)數(shù)組具體可為255行2列數(shù)組,每一行代表局域網(wǎng)中的一臺主機(jī),然后第一列代表其是否處于可到達(dá)狀態(tài),第二列代表其是否處于可通信狀態(tài)。</p><p>
96、因?yàn)槌绦騽倖訒r(shí)的網(wǎng)絡(luò)掃描階段耗時(shí)較久,所以應(yīng)當(dāng)在程序啟動后以一個(gè)人性化的界面提示用戶不要以為程序無法響應(yīng)了,暫時(shí)的緩慢是正常反應(yīng)。</p><p><b> 4.4用戶界面設(shè)計(jì)</b></p><p> 4.4.1啟動畫面設(shè)計(jì)</p><p> 用戶界面將由MFC框架的基于對話框的應(yīng)用程序模板生成,然后在模板的基礎(chǔ)上做具體的設(shè)計(jì),美化修
97、改。當(dāng)用戶雙擊程序圖標(biāo)時(shí)應(yīng)該正常啟動程序,并顯示啟動畫面,顯示版本及作者信息。 </p><p> 4.4.2主顯示界面</p><p> 當(dāng)掃描完畢時(shí)后,在主顯示界面中就會顯示出局域網(wǎng)內(nèi)所有當(dāng)前在線的用戶列表,并且顯示哪些主機(jī)可以進(jìn)行聊天。并且由于顯示是即時(shí)的,也就是掃描完一臺馬上顯示出來,并且用戶可以看到當(dāng)前正在掃描哪一臺機(jī)器,這樣的設(shè)計(jì)也是比較合理的,如下圖4-5所示。本程序還有
98、一個(gè)附加非常方便的功能就是上線提示,當(dāng)局域網(wǎng)內(nèi)某用戶打開了對應(yīng)的程序,那么就會彈出相應(yīng)的提示,并即時(shí)更新用戶列表。</p><p> 圖4-1程序主顯示界面</p><p> 4.4.3用戶聊天及接收信息界面</p><p> 當(dāng)雙擊列表中的某一項(xiàng)時(shí),會彈出聊天對話框,來實(shí)現(xiàn)消息發(fā)送功能,或者當(dāng)程序接收到某個(gè)網(wǎng)內(nèi)用戶發(fā)來的信息時(shí),也要彈出對話框向用戶進(jìn)行顯示。
99、</p><p> 第5章 詳細(xì)設(shè)計(jì)及編碼實(shí)現(xiàn)</p><p> import java.awt.BorderLayout;</p><p> import java.awt.Dimension;</p><p> import java.awt.Toolkit;</p><p> import java.a
100、wt.event.ActionEvent;</p><p> import java.awt.event.ActionListener;</p><p> import java.io.BufferedReader;</p><p> import java.io.InputStreamReader;</p><p> import
101、java.io.PrintWriter;</p><p> import java.net.ServerSocket;</p><p> import java.net.Socket;</p><p> import javax.swing.JButton;</p><p> import javax.swing.JFrame;<
102、;/p><p> import javax.swing.JLabel;</p><p> import javax.swing.JPanel;</p><p> import javax.swing.JScrollPane;</p><p> import javax.swing.JTextArea;</p><p&g
103、t; import javax.swing.JTextField;</p><p> import javax.swing.ScrollPaneConstants;</p><p><b> //測試類</b></p><p> public class Exec {</p><p> public stati
104、c void main(String[] args) {</p><p> // 創(chuàng)建窗體類變量</p><p> DemoWindow dw = new DemoWindow("基于窗體界面的點(diǎn)對點(diǎn)聊天程序");</p><p> // 將窗體的寬度和高度分別設(shè)置為屏幕寬度和屏幕高度的1/3,左上角位置也設(shè)置為屏幕寬度和屏幕高度的1/3處
105、</p><p> Toolkit theKit = dw.getToolkit();</p><p> Dimension wndSize = theKit.getScreenSize();</p><p> dw.setBounds(wndSize.width / 3, wndSize.height / 3, wndSize.width / 3,</
106、p><p> wndSize.height / 3);</p><p> // 點(diǎn)擊關(guān)閉按鈕可以退出程序</p><p> dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> // 設(shè)置窗體為可見</p><p> dw.setVisible(t
107、rue);</p><p><b> }</b></p><p><b> }</b></p><p><b> // 界面窗體</b></p><p> class DemoWindow extends JFrame implements ActionListener
108、 {</p><p><b> // 布局面板</b></p><p> JPanel jp1 = new JPanel();</p><p> JPanel jp2 = new JPanel();</p><p><b> // 提示標(biāo)簽</b></p><p>
109、 JLabel jl1 = new JLabel("對方主機(jī)");</p><p> JLabel jl2 = new JLabel("本地端口");</p><p> JLabel jl3 = new JLabel("對方端口");</p><p> // 輸入對方主機(jī)IP或者域名的文本框</
110、p><p> JTextField jtf1 = new JTextField(8);</p><p> // 輸入本地端口的文本框</p><p> JTextField jtf2 = new JTextField(3);</p><p> // 輸入對方端口的文本框</p><p> JTextField j
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件-畢業(yè)論文
- java畢業(yè)論文---局域網(wǎng)聊天軟件
- 基于java局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于java局域網(wǎng)聊天軟件
- java局域網(wǎng)聊天室系統(tǒng)畢業(yè)論文
- 局域網(wǎng)聊天工具設(shè)計(jì)畢業(yè)論文
- 畢業(yè)設(shè)計(jì)--局域網(wǎng)聊天系統(tǒng)
- 局域網(wǎng)小型局域網(wǎng)組建畢業(yè)論文
- 軟件課程設(shè)計(jì)---局域網(wǎng)聊天程序
- 原創(chuàng)畢業(yè)設(shè)計(jì)論文局域網(wǎng)聊天系統(tǒng)
- 畢業(yè)論文--局域網(wǎng)(小型局域網(wǎng))組建
- 局域網(wǎng)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文
- 局域網(wǎng)聊天系統(tǒng)畢業(yè)設(shè)計(jì)
- vc局域網(wǎng)聊天室
- 軟件課程設(shè)計(jì)報(bào)告--局域網(wǎng)聊天程序
- 局域網(wǎng)畢業(yè)論文
- 局域網(wǎng)畢業(yè)論文
- mfc小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文
評論
0/150
提交評論