畢業(yè)論文---局域網(wǎng)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
已閱讀1頁(yè),還剩44頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)論文(設(shè)計(jì))</p><p>  題 目: 基于C/S飛鳥(niǎo)局域網(wǎng)聊天工具的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  院 系: 計(jì)算機(jī)科學(xué)系 </p><p>  專(zhuān) 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  姓 名:

2、 </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)教師: </p><p>  教師職稱(chēng): </p><p>  填寫(xiě)日期: 2012年 5月1 日</p><p

3、><b>  摘 要</b></p><p>  在網(wǎng)絡(luò)越來(lái)越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴(lài)越來(lái)越多,越來(lái)越離不開(kāi)網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來(lái)越多,例如,國(guó)外的ICQ、國(guó)內(nèi)騰訊公司開(kāi)發(fā)的OICQ?;贘ava網(wǎng)絡(luò)編程的強(qiáng)大功能,本次畢業(yè)設(shè)計(jì)使用Java編寫(xiě)一個(gè)聊天系統(tǒng)。</p><p>  本系統(tǒng)建立在JAVA平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)

4、計(jì)原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶(hù)端與客戶(hù)端以及客戶(hù)端與服務(wù)器端之間通過(guò)Socket傳送消息。使用JAVA語(yǔ)言編寫(xiě),開(kāi)發(fā)工具采用Eclipse。服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,采用了多線(xiàn)程技術(shù),可以在單個(gè)程序當(dāng)中同時(shí)運(yùn)行多個(gè)不同的線(xiàn)程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。</p><p>  一般來(lái)說(shuō),聊天工具大多數(shù)由客戶(hù)端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶(hù)數(shù)據(jù)的數(shù)據(jù)庫(kù)組成,本系統(tǒng)采用客戶(hù)機(jī)/服務(wù)器架

5、構(gòu)模式通過(guò)Java提供的Socket類(lèi)來(lái)連接客戶(hù)機(jī)和服務(wù)器并使客戶(hù)機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對(duì)多點(diǎn)的而Java提供的多線(xiàn)程功能用多線(xiàn)程可完成多點(diǎn)對(duì)多點(diǎn)的聊天,數(shù)據(jù)庫(kù)管理系統(tǒng)用SQL Server2005完成并通過(guò)JDBC-ODBC橋訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。</p><p>  聊天系統(tǒng)完成后將可進(jìn)行多人對(duì)多人的聊天,對(duì)好友進(jìn)行添加、刪除,對(duì)新用戶(hù)的注冊(cè),發(fā)送消息、接受消息等等功能</p><p

6、>  關(guān)鍵詞:多線(xiàn)程 ; JAVA ; Socket ; TCP/IP </p><p><b>  Abstract </b></p><p>  as the network become more and more developed, people become more and more lean to the network, and can not

7、 leave with out it. This caused the chat materials become more numerous, as the overseas ICQ system, the OICQ system that invented by Tencent Co., and so on. So we create a network chat medium just like the QQ. Java netw

8、ork programming based on the power, the use of Java designed to prepare graduates a chat system.</p><p>  In general, the majority of the chat tool for client and server program in addition to server-side st

9、orage of customer data for the database, the system uses a client / server architecture model the adoption of Java provided Socket class connect client and server and between the client and server communicate with each o

10、ther, as the chat is to provide point-to-multipoint and multi-threaded Java function to be completed by using multi-threaded chat and more point-to-multipoint, database management</p><p>  The system built o

11、n the JAVA platform, the system design using object-oriented technology and object-oriented design principles. System uses the C / S structure, client and client-side and server-side client and send messages through Sock

12、et. The use of JAVA language, development tools using Eclipse. Design and Implementation of server-side process, the use of multi-threading technology, which can process in a single run at the same time a number of diffe

13、rent threads, the implementation of differ</p><p>  Chat system will allow people to complete chat to more friends,and the system can add, delete somebody,can deal with new user registration, send messages,

14、receive messages and so on. </p><p>  Keywords : Multithreading ; JAVA ;Socket ; TCP/IP</p><p><b>  目 錄</b></p><p><b>  摘 要1</b></p><p>  

15、Abstract2</p><p><b>  第一章 前言5</b></p><p>  第一節(jié) 課題研究的意義5</p><p>  第二節(jié) 國(guó)內(nèi)外聊天系統(tǒng)的研究現(xiàn)狀5</p><p>  第二節(jié) Java語(yǔ)言6</p><p>  一、Java的發(fā)展歷史6</p>

16、<p>  二、Java的特點(diǎn)6</p><p>  三、Java與Internet7</p><p>  第三節(jié) Socket編程8</p><p>  一、關(guān)于TCP/IP協(xié)議8</p><p>  二、服務(wù)器和客戶(hù)機(jī)9</p><p>  第四節(jié) 多線(xiàn)程編程9</p><

17、p>  第二章 需求分析12</p><p>  第一節(jié) 可行性分析12</p><p>  一、經(jīng)濟(jì)可行性12</p><p>  二、技術(shù)可行性12</p><p>  三、運(yùn)行可行性12</p><p>  第二節(jié) 系統(tǒng)功能需求12</p><p><b>  

18、一、服務(wù)器端12</b></p><p><b>  二、客戶(hù)端13</b></p><p>  第三節(jié) 系統(tǒng)性能需求13</p><p><b>  一、實(shí)用性13</b></p><p><b>  二、操作簡(jiǎn)單13</b></p>&l

19、t;p><b>  三、技術(shù)先進(jìn)13</b></p><p>  四、安裝使用簡(jiǎn)便13</p><p><b>  五、實(shí)用性好13</b></p><p>  六、代碼可讀性好14</p><p>  第四節(jié) 系統(tǒng)運(yùn)行需求14</p><p><b&

20、gt;  一、運(yùn)行環(huán)境14</b></p><p><b>  二、必要環(huán)境14</b></p><p><b>  三、硬件環(huán)境14</b></p><p>  第五節(jié) 數(shù)據(jù)流圖14</p><p>  一、頂層數(shù)據(jù)流圖14</p><p>  二、一

21、層數(shù)據(jù)流圖15</p><p>  三、二層數(shù)據(jù)流圖16</p><p>  第六節(jié) 系統(tǒng)數(shù)據(jù)關(guān)系圖16</p><p>  一、系統(tǒng)E-R圖16</p><p>  二、數(shù)據(jù)庫(kù)關(guān)系圖18</p><p>  第三章 概要設(shè)計(jì)19</p><p>  第一節(jié) 系統(tǒng)實(shí)現(xiàn)原理19<

22、;/p><p>  第二節(jié) 系統(tǒng)實(shí)現(xiàn)層次圖20</p><p>  第三節(jié) 各模塊詳細(xì)功能20</p><p>  一、服務(wù)器端結(jié)構(gòu)20</p><p>  二、客戶(hù)端結(jié)構(gòu)21</p><p>  第四章 詳細(xì)設(shè)計(jì)22</p><p>  第一節(jié) 系統(tǒng)流程圖22</p>&

23、lt;p>  一、系統(tǒng)總體流程圖22</p><p>  二、系統(tǒng)客戶(hù)端流程圖23</p><p>  第二節(jié) 編寫(xiě)服務(wù)器端程序24</p><p><b>  一、問(wèn)題陳述24</b></p><p><b>  二、解決方案24</b></p><p> 

24、 第三節(jié) 客戶(hù)端程序編寫(xiě)34</p><p>  第四節(jié) 用戶(hù)登錄36</p><p>  一、收集用戶(hù)登錄信息36</p><p>  第五節(jié) 聊天室37</p><p>  一、用戶(hù)發(fā)送信息38</p><p>  第七節(jié) 退出聊天系統(tǒng)40</p><p>  第八節(jié) 出現(xiàn)異常信

25、息41</p><p>  第五章 總 結(jié)42</p><p><b>  致謝43</b></p><p><b>  參考文獻(xiàn)44</b></p><p><b>  第一章 前言</b></p><p>  第一節(jié) 課題研究的意義<

26、/p><p>  研究該課題,具有重大意義,這對(duì)于今后研究網(wǎng)絡(luò)與通信融合具有指導(dǎo)作用。雖然目前的聊天軟件已經(jīng)具備強(qiáng)大多種的功能,并且支持廣域網(wǎng)的聊天,但是他們?nèi)匀淮嬖诟鞣N各樣的問(wèn)題,如安全問(wèn)題。雖然該課題僅僅包含了即時(shí)通訊軟件的簡(jiǎn)單的功能,但對(duì)于后續(xù)的研究與開(kāi)發(fā),有一定的輔助作用。</p><p>  第二節(jié) 國(guó)內(nèi)外聊天系統(tǒng)的研究現(xiàn)狀</p><p>  隨著移動(dòng)互聯(lián)網(wǎng)

27、的發(fā)展,互聯(lián)網(wǎng)即時(shí)通信也在向移動(dòng)化擴(kuò)張。目前,微軟、AOL、Yahoo、UcSTAR等重要即時(shí)通信提供商都提供通過(guò)手機(jī)接入互聯(lián)網(wǎng)即時(shí)通信的業(yè)務(wù),用戶(hù)可以通過(guò)手機(jī)與其他已經(jīng)安裝了相應(yīng)客戶(hù)端軟件的手機(jī)或電腦收發(fā)消息。 </p><p>  即時(shí)聊天軟件最早的創(chuàng)始人是三個(gè)以色列青年,是他們?cè)?996年做出來(lái)的,取名叫ICQ。1998年當(dāng)ICQ注冊(cè)用戶(hù)數(shù)達(dá)到1200萬(wàn)時(shí),被AOL看中,以2.87億美元的天價(jià)買(mǎi)走。目前IC

28、Q有1億多用戶(hù),主要市場(chǎng)在美洲和歐洲,已成為世界上最大的即時(shí)通信系統(tǒng)。 </p><p>  現(xiàn)在國(guó)內(nèi)的即時(shí)通信工具按照使用對(duì)象分為兩類(lèi):一類(lèi)是個(gè)人IM,如:QQ,百度hi,網(wǎng)易泡泡,盛大圈圈,淘寶旺旺等等。QQ的前身OICQ在1999年2月第一次推出,目前幾乎接近壟斷中國(guó)在線(xiàn)即時(shí)通訊軟件市場(chǎng)。百度Hi具備文字消息、音視頻通話(huà)、文件傳輸?shù)裙δ埽赏ㄟ^(guò)它找到志同道合的朋友,并隨時(shí)與好友聯(lián)絡(luò)感情;另一類(lèi)是企業(yè)用IM

29、,簡(jiǎn)稱(chēng)EIM,如:E話(huà)通,UC,EC企業(yè)即時(shí)通信軟件,UcSTAR、商務(wù)通等。 </p><p>  即時(shí)通信最初是由AOL、微軟、雅虎、騰訊等獨(dú)立于電信運(yùn)營(yíng)商的即時(shí)通信服務(wù)商提供的。但隨著其功能日益豐富、應(yīng)用日益廣泛,特別是即時(shí)通信增強(qiáng)軟件的某些功能如IP電話(huà)等,已經(jīng)在分流和替代傳統(tǒng)的電信業(yè)務(wù),使得電信運(yùn)營(yíng)商不得不采取措施應(yīng)對(duì)這種挑戰(zhàn)。2006年6月,中國(guó)移動(dòng)已經(jīng)推出了自己的即時(shí)通信工具——Fetion,中國(guó)聯(lián)

30、通也將推出即時(shí)通訊工具“超信”,但由于進(jìn)入市場(chǎng)較晚,其用戶(hù)規(guī)模和品牌知名度還比不上原有的即時(shí)通信服務(wù)提供商。</p><p>  第二節(jié) Java語(yǔ)言</p><p>  一、Java的發(fā)展歷史</p><p>  Java的發(fā)展歷史,可以追朔到1990年。當(dāng)時(shí)Sun Microsystem公司為了發(fā)展消費(fèi)類(lèi)電子產(chǎn)品進(jìn)行了一個(gè)名為Green的項(xiàng)目計(jì)劃。這個(gè)計(jì)劃的負(fù)責(zé)

31、任是James Gosling。起初他用具有面向?qū)ο筇卣鞯腃++語(yǔ)言編寫(xiě)嵌入式軟件,可以放在面包機(jī)或PDA(Personal Digital Assistant,個(gè)人數(shù)字主力)等小型電子消費(fèi)這杯里,以使設(shè)備變得更為“聰明”,更具備人工只能。但后來(lái)發(fā)現(xiàn)C++并不適合這類(lèi)任務(wù);因?yàn)镃++常會(huì)使系統(tǒng)失效。尤其在內(nèi)存管理方面,c++采用直接地址訪(fǎng)問(wèn)方式。需要程序員記錄并管理內(nèi)存資源。這造成程序員編程的極大負(fù)擔(dān),并可能產(chǎn)生多個(gè)Bugs。面包機(jī)上的

32、程序錯(cuò)誤可能使面包機(jī)燒壞甚至爆炸。</p><p>  為了解決此類(lèi)問(wèn)題,Gosling決定開(kāi)發(fā)一種新的語(yǔ)言,并取名為Oak。它采用了大部分與C++類(lèi)似的語(yǔ)法對(duì)可能具備危險(xiǎn)性的功能加以改進(jìn),例如將內(nèi)存管理改為由語(yǔ)言自己進(jìn)行管理,以減少程序員的負(fù)擔(dān)及可能發(fā)生的錯(cuò)誤。Oak是一種可移置的語(yǔ)言,它是一種平臺(tái)獨(dú)立的語(yǔ)言,能夠在各種芯片上執(zhí)行,可以降低設(shè)備的研發(fā)成本。</p><p><b&g

33、t;  二、Java的特點(diǎn)</b></p><p>  Java是一種簡(jiǎn)單、安全、適用、面向?qū)ο?、可移置、高性能、多線(xiàn)程的語(yǔ)言。</p><p><b>  簡(jiǎn)單性</b></p><p>  Java語(yǔ)言簡(jiǎn)單高效,基本Java系統(tǒng)(編譯器和解釋器)所占空間不足250KB由于Java最初是為了對(duì)家用電器進(jìn)行集成控制而設(shè)計(jì)的,因而具備

34、簡(jiǎn)單明了的特征。</p><p><b>  面向?qū)ο?lt;/b></p><p>  面向?qū)ο蠹夹g(shù)是現(xiàn)代工業(yè)的一次革新,提高了軟件的模塊化程度和重復(fù)適用率,縮短了軟件開(kāi)發(fā)時(shí)間,減低了卡發(fā)成本。在Java之前雖然已經(jīng)有面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言問(wèn)問(wèn)世,但有些如C++并不是完全的面向?qū)ο?,而是面向過(guò)程和面向?qū)ο蟮幕旌象w。Java則是完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。</p>

35、;<p><b>  安全性</b></p><p>  Java是可以用在網(wǎng)路及分布環(huán)境下的網(wǎng)路程序設(shè)計(jì)語(yǔ)言。在網(wǎng)路環(huán)境下,語(yǔ)言的安全性變得更為重要。Java提供了許多安全機(jī)制來(lái)保證其適用上的安全性。</p><p><b>  平臺(tái)獨(dú)立</b></p><p>  平臺(tái)獨(dú)立指程序不受操作平臺(tái)的限制,可以應(yīng)

36、用在各種平臺(tái)上。Java源程序經(jīng)過(guò)編譯后生成字節(jié)碼文件,而字節(jié)碼與具體的計(jì)算機(jī)無(wú)關(guān)。只要計(jì)算機(jī)安裝了能解釋執(zhí)行字節(jié)碼的Java虛擬機(jī)JVM,就可以執(zhí)行字節(jié)碼文件,從而實(shí)現(xiàn)Java的平臺(tái)獨(dú)立性。</p><p><b>  多線(xiàn)程</b></p><p>  Java具備內(nèi)建的多線(xiàn)程功能,可以將一個(gè)程序的不同程序段設(shè)置為不同的線(xiàn)程,使各線(xiàn)程并發(fā)、獨(dú)立執(zhí)行,提高系統(tǒng)的運(yùn)行

37、效率。</p><p><b>  6.網(wǎng)絡(luò)功能</b></p><p>  Java能從全球網(wǎng)絡(luò)資源獲取所需信息,如數(shù)據(jù)文件、影響文件、聲音文件等,并對(duì)所得信息進(jìn)行處理,所以說(shuō)Java是一種網(wǎng)絡(luò)語(yǔ)言。</p><p><b>  7.執(zhí)行效率</b></p><p>  Java的字節(jié)碼需要經(jīng)過(guò)J

38、ava虛擬機(jī)JVM解釋成機(jī)器碼才能執(zhí)行,所以速度上較慢。但是隨著JVM技術(shù)的進(jìn)步,使得其執(zhí)行速度直逼C與C++。</p><p>  三、Java與Internet</p><p>  Java語(yǔ)言取得成功的領(lǐng)域之一就是網(wǎng)絡(luò),(其他語(yǔ)言)數(shù)頁(yè)代碼---->(Java)一條語(yǔ)句  TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是internet的主要協(xié)議,定義了計(jì)算機(jī)和外

39、設(shè)進(jìn)行通信所使用的規(guī)則(應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈路層),大多數(shù)基于internet的應(yīng)用程序被看作TCP/IP協(xié)議的上一層, 如 : ftp、http、smtp、pop3、 telnet、nntp等。  IP地址:TCP/IP網(wǎng)絡(luò)中的每臺(tái)計(jì)算機(jī)都有唯一的地址--IP地址。</p><p>  在Java中,有一個(gè)用來(lái)存儲(chǔ)internet地址的類(lèi)叫InterAddress。</p>

40、;<p>  Java提供的網(wǎng)絡(luò)功能有三大類(lèi): URL, Socket, Datagram。</p><p>  1、URL是三大功能中最高級(jí)的一種,通過(guò)URL Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù).</p><p>  2、Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個(gè)不同的程序通過(guò)網(wǎng)絡(luò)的通信信道.</p><p>  3、Datagr

41、am是更低級(jí)的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上</p><p>  第三節(jié) Socket編程</p><p>  一、關(guān)于TCP/IP協(xié)議</p><p>  TCP協(xié)議是網(wǎng)絡(luò)通信的基石,對(duì)此,Java專(zhuān)門(mén)提供了Socket的類(lèi)庫(kù),在其中抽象出TCP協(xié)議通信的常用方法:</p><p>  TCP協(xié)議與三次握手:

42、</p><p>  在講述TCP協(xié)議流程前,先來(lái)聲明兩個(gè)重要的概念:</p><p> ?。?)客戶(hù)端,首先發(fā)送TCP請(qǐng)求的是客戶(hù)端,客戶(hù)端一般是服務(wù)(比如數(shù)據(jù)查詢(xún)服務(wù))的請(qǐng)求者。</p><p> ?。?)服務(wù)器,在接收到客戶(hù)端的請(qǐng)求后(確保同客戶(hù)端的通信信道建立)服務(wù)器會(huì)向客戶(hù)端提供服務(wù)。服務(wù)器一般是服務(wù)的執(zhí)行者,會(huì)向客戶(hù)端返回服務(wù)執(zhí)行的結(jié)果。</p&g

43、t;<p>  為了實(shí)現(xiàn)客戶(hù)端同服務(wù)器端的通信,客戶(hù)端首先發(fā)送一個(gè)“SYN”數(shù)據(jù)包。如果服務(wù)器收到SYN標(biāo)記,它將發(fā)回一個(gè)“SYN+ACK”數(shù)據(jù)包。接著,客戶(hù)端為了表示收到了這個(gè)SYN+ACK信息,會(huì)向服務(wù)器發(fā)送一個(gè)最終確認(rèn)信息(ACK包)。這種SYN,SYN+ACK,ACK的步驟被稱(chēng)為T(mén)CP連接建立時(shí)的“三次握手”,在這之后,連接就建立起來(lái)了,這個(gè)連接將一直保持活動(dòng)狀態(tài),直到超時(shí)或者任何一方發(fā)出一個(gè)FIN(結(jié)束)信號(hào)。這

44、種通信模式也叫客戶(hù)端/服務(wù)器(C/S)模式。</p><p>  主機(jī)A 主機(jī)B</p><p>  圖1.1 三次握手協(xié)議</p><p>  由此可見(jiàn),通過(guò)客戶(hù)端和服務(wù)器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。</p><p><b>  二、服務(wù)器和客戶(hù)機(jī)

45、</b></p><p>  網(wǎng)絡(luò)最基本的目的就是讓兩臺(tái)機(jī)器連接到一起,并相互“交談”或者“溝通”。一旦兩臺(tái)機(jī)器都發(fā)現(xiàn)了對(duì)方,就可以展開(kāi)一次令人愉快的雙向?qū)υ?huà)。但它們?cè)鯓硬拍堋鞍l(fā)現(xiàn)”對(duì)方呢?這就像在游樂(lè)園里那樣:一臺(tái)機(jī)器不得不停留在一個(gè)地方,偵聽(tīng)其他機(jī)器說(shuō):“嘿,你在哪里呢?” “停留在一個(gè)地方”的機(jī)器叫做“服務(wù)器”(Server);到處“找人”的機(jī)器則叫做“客戶(hù)機(jī)”(Client)或者“客戶(hù)

46、”。它們之間的區(qū)別只有在客戶(hù)機(jī)試圖同服務(wù)器連接的時(shí)候才顯得非常明顯。一旦連通,就變成了一種雙向通信,誰(shuí)來(lái)扮演服務(wù)器或者客戶(hù)機(jī)便顯得不那么重要了。 所以服務(wù)器的主要任務(wù)是偵聽(tīng)建立連接的請(qǐng)求,這是由我們創(chuàng)建的特定服務(wù)器對(duì)象完成的。而客戶(hù)機(jī)的任務(wù)是試著與一臺(tái)服務(wù)器建立連接,這是由我們創(chuàng)建的特定客戶(hù)機(jī)對(duì)象完成的。一旦連接建好,那么無(wú)論在服務(wù)器端還是客戶(hù)機(jī)端,連接只是魔術(shù)般地變成了一個(gè)IO數(shù)據(jù)流對(duì)象。從這時(shí)開(kāi)始,我們可以象讀寫(xiě)一個(gè)普通的文

47、件那樣對(duì)待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是Java聯(lián)網(wǎng)最方便的一個(gè)地方。</p><p>  圖1.2 服務(wù)器和客戶(hù)機(jī)的連接</p><p><b>  第四節(jié) 多線(xiàn)程編程</b></p><p>  多線(xiàn)程編成是網(wǎng)絡(luò)編成的基礎(chǔ),幾乎所有的網(wǎng)絡(luò)編程都將涉及到多個(gè)線(xiàn)程的數(shù)據(jù)傳輸,并且還要實(shí)現(xiàn)界面和數(shù)據(jù)處理互不影響

48、。多線(xiàn)程編成雖說(shuō)是基礎(chǔ),但是卻是一個(gè)難點(diǎn),因?yàn)榫€(xiàn)程同步的確比我們想象的復(fù)雜得多。要理解多線(xiàn)程編成就必須從以下幾個(gè)方面理解:一、操作系統(tǒng)多任務(wù)概念;二、線(xiàn)程和進(jìn)程的聯(lián)系與區(qū)別;三、如何創(chuàng)建并管理銷(xiāo)毀一個(gè)線(xiàn)程;四、何謂線(xiàn)程同步,怎樣同步。</p><p>  什么是多任務(wù)概念?用通俗易懂的話(huà)就是幾個(gè)運(yùn)行的任務(wù)“同時(shí)”進(jìn)行,比如Windows就是典型的多任務(wù)操作系統(tǒng),我們可以同時(shí)進(jìn)行聽(tīng)歌,打游戲,聊QQ,在基于這種理念

49、的系統(tǒng)感覺(jué)就像所有的程序在同時(shí)運(yùn)行一樣。但實(shí)際上在單CPU的機(jī)子上,這些程序并不是同時(shí)在運(yùn)行(即便是在多CPU的電腦上,也不可能所有程序同時(shí)運(yùn)行),所有的程序都以某種調(diào)度算法,按照優(yōu)先級(jí),依次獲取CPU時(shí)間,每當(dāng)一個(gè)程序獲得CPU時(shí)間后,它就會(huì)得到運(yùn)行,而當(dāng)運(yùn)行一段時(shí)間后,操作系統(tǒng)會(huì)將其暫停,再接換新的線(xiàn)程來(lái)運(yùn)行。由于電腦的速度很快,這種非并發(fā)的模式卻可以達(dá)到類(lèi)似并發(fā)的效果。實(shí)際上,正如前面所說(shuō),操作系統(tǒng)并非是給某一程序分配時(shí)間片,準(zhǔn)確

50、的說(shuō)是給這個(gè)程序里的某一線(xiàn)程分配了時(shí)間片。因此,在多任務(wù)操作系統(tǒng)中(若有線(xiàn)程的話(huà)),線(xiàn)程將是運(yùn)行的最小單位。</p><p>  在windows系統(tǒng)中,進(jìn)程和線(xiàn)程是最為重要的兩個(gè)概念,因?yàn)檎麄€(gè)系統(tǒng)就是基于進(jìn)程和線(xiàn)程的。那么進(jìn)程和線(xiàn)程有什么區(qū)別和聯(lián)系呢?進(jìn)程實(shí)際就是一個(gè)運(yùn)行的程序,該程序有自己的堆??臻g,有自己的線(xiàn)程(至少有一個(gè)主線(xiàn)程),并且可以創(chuàng)建其它進(jìn)程或線(xiàn)程。有一個(gè)概念容易搞錯(cuò),就是進(jìn)程是否能獲得CPU時(shí)間

51、片?實(shí)際上,進(jìn)程是無(wú)法獲取CPU時(shí)間片,只有該進(jìn)程里的線(xiàn)程才能,所以說(shuō),真正執(zhí)行代碼的是線(xiàn)程,而進(jìn)程只能管理線(xiàn)程,管理內(nèi)存等。</p><p><b>  第二章 需求分析</b></p><p><b>  第一節(jié) 可行性分析</b></p><p><b>  一、經(jīng)濟(jì)可行性</b></p&

52、gt;<p>  由于本系統(tǒng)的主要背景是畢業(yè)課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)能運(yùn)行Java軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。</p><p><b>  二、技術(shù)可行性</b></p><p>  本系統(tǒng)的開(kāi)發(fā)利用Microsoft SQL Server2005作為本系

53、統(tǒng)的數(shù)據(jù)庫(kù),它是一個(gè)支持多用戶(hù)的新型數(shù)據(jù)庫(kù),適用于大中規(guī)模的數(shù)據(jù)量需求。學(xué)校校園網(wǎng)的建設(shè)也為新系統(tǒng)服務(wù)器/客戶(hù)端的結(jié)構(gòu)提供了硬件的支持。使用Java作為系統(tǒng)開(kāi)發(fā)的開(kāi)發(fā)環(huán)境,它提供完善的指令控制語(yǔ)句、類(lèi)與對(duì)象的支持及豐富的數(shù)據(jù)類(lèi)型,給開(kāi)發(fā)高性能系統(tǒng)提供的保障為開(kāi)發(fā)滿(mǎn)足客戶(hù)要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對(duì)新系統(tǒng)的擴(kuò)展與修改。</p><p><b>  三、運(yùn)行可行性

54、</b></p><p>  本系統(tǒng)為一個(gè)小型的局域網(wǎng)聊天系統(tǒng),所耗費(fèi)的資源非常的小,現(xiàn)在一般的電腦無(wú)論是硬件還是軟件都能夠滿(mǎn)足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。</p><p>  綜上所述,本系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿(mǎn)足的,因此,它在技術(shù)上是可行的。</p><p>  第二節(jié) 系統(tǒng)功能需求</p><p&

55、gt;  本系統(tǒng)主要通過(guò)客戶(hù)端,服務(wù)器端來(lái)體現(xiàn)聊天系統(tǒng)的基本功能。</p><p><b>  一、服務(wù)器端</b></p><p><b>  1.處理用戶(hù)注冊(cè)</b></p><p><b>  2.處理用戶(hù)登錄</b></p><p>  3.處理用戶(hù)發(fā)送信息,服務(wù)器監(jiān)控

56、聊天內(nèi)容,服務(wù)器過(guò)濾非法內(nèi)容</p><p>  4.處理用戶(hù)得到信息</p><p><b>  5.處理用戶(hù)退出。</b></p><p>  6. 保存服務(wù)器日志。</p><p>  7.保存用戶(hù)聊天信息。</p><p><b>  二、客戶(hù)端</b></p&

57、gt;<p>  1.用戶(hù)注冊(cè)界面及結(jié)果</p><p>  2.用戶(hù)登錄界面及結(jié)果</p><p>  3.用戶(hù)發(fā)送信息界面及結(jié)果</p><p>  4.用戶(hù)得到信息界面及結(jié)果</p><p>  5.用戶(hù)退出界面及結(jié)果</p><p>  第三節(jié) 系統(tǒng)性能需求</p><p>

58、;<b>  一、實(shí)用性</b></p><p>  為局域網(wǎng)聊天提供方便,有效進(jìn)行作業(yè)管理。</p><p><b>  二、操作簡(jiǎn)單</b></p><p>  本系統(tǒng)應(yīng)該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時(shí)系統(tǒng)不應(yīng)太復(fù)雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡(jiǎn)單易行。</p><p>

59、;<b>  三、技術(shù)先進(jìn)</b></p><p>  產(chǎn)品的系統(tǒng)設(shè)計(jì)和開(kāi)發(fā)應(yīng)緊跟著整個(gè)計(jì)算機(jī)發(fā)展潮流,采用當(dāng)時(shí)最先進(jìn)的設(shè)計(jì)思想,利用最新的開(kāi)發(fā)技術(shù)和開(kāi)發(fā)工具。使系統(tǒng)能夠無(wú)論在功能設(shè)計(jì)上,還是在技術(shù)實(shí)現(xiàn)上,都處于同行業(yè)的領(lǐng)先地位。</p><p><b>  四、安裝使用簡(jiǎn)便</b></p><p>  服務(wù)器端的安裝簡(jiǎn)潔

60、明了,客戶(hù)機(jī)無(wú)需再裝任何軟件就可以直接注冊(cè)登陸聊天。</p><p><b>  五、實(shí)用性好</b></p><p>  應(yīng)該能廣泛應(yīng)用于不同類(lèi)型的企事業(yè)單位。系統(tǒng)采用模塊化設(shè)計(jì),用戶(hù)可以根據(jù)自己的實(shí)際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應(yīng)用。</p><p><b>  六、代碼可讀性好 </b></p

61、><p>  文中的代碼將盡可能簡(jiǎn)潔,易懂。</p><p>  第四節(jié) 系統(tǒng)運(yùn)行需求</p><p><b>  一、運(yùn)行環(huán)境</b></p><p>  Windows 9x、xp</p><p><b>  二、必要環(huán)境</b></p><p> 

62、 JDK 1.5 以上</p><p><b>  三、硬件環(huán)境</b></p><p>  CPU 400MHz以上,內(nèi)存64MB以上</p><p><b>  第五節(jié) 數(shù)據(jù)流圖</b></p><p><b>  一、頂層數(shù)據(jù)流圖</b></p><p

63、>  圖2.1 頂層數(shù)據(jù)流圖</p><p><b>  二、一層數(shù)據(jù)流圖</b></p><p><b>  . </b></p><p>  圖2.2 一層數(shù)據(jù)流圖</p><p><b>  三、二層數(shù)據(jù)流圖</b></p><p>  圖2

64、.3 系統(tǒng)二層數(shù)據(jù)流圖</p><p>  第六節(jié) 系統(tǒng)數(shù)據(jù)關(guān)系圖</p><p><b>  一、系統(tǒng)E-R圖</b></p><p>  E-R圖的圖形表示的意義:</p><p>  圖2.4 用戶(hù)E-R圖</p><p>  圖2.5 好友分組E-R圖</p><p&g

65、t;  圖2.6 好友關(guān)系 E-R圖</p><p><b>  1</b></p><p><b>  N</b></p><p><b>  N</b></p><p><b>  M</b></p><p>  圖2.7 總體

66、E-R圖</p><p><b>  二、數(shù)據(jù)庫(kù)關(guān)系圖</b></p><p>  圖2.8 數(shù)據(jù)庫(kù)關(guān)系圖</p><p><b>  第三章 概要設(shè)計(jì)</b></p><p>  第一節(jié) 系統(tǒng)實(shí)現(xiàn)原理</p><p>  聊天系統(tǒng)的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通

67、網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫(huà)設(shè)計(jì)等等,而聊天室只要提供滿(mǎn)足訪(fǎng)客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):</p><p>  在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶(hù)端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶(hù)交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端

68、和客戶(hù)端兩部分程序。</p><p>  圖3.1 系統(tǒng)實(shí)現(xiàn)原理</p><p>  第二節(jié) 系統(tǒng)實(shí)現(xiàn)層次圖</p><p>  圖3.2 系統(tǒng)實(shí)現(xiàn)層次圖</p><p>  第三節(jié) 各模塊詳細(xì)功能</p><p><b>  一、服務(wù)器端結(jié)構(gòu)</b></p><p>  

69、圖3.3 服務(wù)器端結(jié)構(gòu)圖</p><p>  Serve_view.java 為服務(wù)器端程序界面,負(fù)責(zé)為服務(wù)器的啟動(dòng)提供界面服務(wù)。</p><p>  ServerStart.java 為服務(wù)器端啟動(dòng)界面,負(fù)責(zé)監(jiān)聽(tīng)服務(wù)器的狀態(tài),在線(xiàn)人數(shù),最多在線(xiàn)人數(shù),服務(wù)器名稱(chēng),訪(fǎng)問(wèn)協(xié)議,服務(wù)器IP,服務(wù)器端口以及用戶(hù)信息的管理,日志的保存。</p><p>  ServerMo

70、del.java 是連接服務(wù)器和客戶(hù)端的橋梁,主要負(fù)責(zé)將客戶(hù)端的信息傳送給服務(wù)器,并將服務(wù)器端的信息反饋給客戶(hù)端,即所謂的“三次握手”。也是Socket編程的重要部分。</p><p><b>  二、客戶(hù)端結(jié)構(gòu)</b></p><p>  圖3.4 客戶(hù)端結(jié)構(gòu)圖</p><p>  QQ_Client.java 為客戶(hù)端程序啟動(dòng)類(lèi),負(fù)責(zé)客戶(hù)

71、端的啟動(dòng)和退出。</p><p>  QQ_Window.java 為客戶(hù)端程序登錄界面,負(fù)責(zé)用戶(hù)帳號(hào)信息的驗(yàn)證與反饋。</p><p>  RegistView.java 為客戶(hù)端程序注冊(cè)界面,負(fù)責(zé)用戶(hù)帳號(hào)信息的注冊(cè)驗(yàn)證與反饋。</p><p>  QQChat.java 為客戶(hù)端程序聊天室主界面,負(fù)責(zé)接收、發(fā)送聊天內(nèi)容與服務(wù)器端的</p><

72、p>  QQ_Listener 為監(jiān)聽(tīng)類(lèi),負(fù)責(zé)監(jiān)聽(tīng)聊天室界面的操作,當(dāng)用戶(hù)退出時(shí)返回給服務(wù)器信息。</p><p>  第四章 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  第一節(jié) 系統(tǒng)流程圖</b></p><p><b>  一、系統(tǒng)總體流程圖</b></p><p>  圖4.1 系統(tǒng)總體

73、流程圖</p><p>  二、系統(tǒng)客戶(hù)端流程圖</p><p>  圖4.2 客戶(hù)端流程圖</p><p>  第二節(jié) 編寫(xiě)服務(wù)器端程序</p><p><b>  一、問(wèn)題陳述</b></p><p>  1. 接受用戶(hù)注冊(cè)信息并保存在一個(gè)基于文件的對(duì)象型數(shù)據(jù)庫(kù)。</p><

74、;p>  2. 能夠允許注冊(cè)過(guò)的用戶(hù)登錄聊天界面并可以聊天。</p><p>  3. 能夠接受私聊信息并發(fā)送給特定的用戶(hù)。</p><p>  4. 服務(wù)器運(yùn)行在自定義的端口上.</p><p>  5. 服務(wù)器監(jiān)控用戶(hù)列表和用戶(hù)聊天信息(除私聊外)。</p><p><b>  6. 發(fā)送通知。</b><

75、/p><p>  7. 服務(wù)器保存日志。</p><p><b>  二、解決方案 </b></p><p><b>  1.后臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  基于服務(wù)器跨平臺(tái)運(yùn)行的構(gòu)想,服務(wù)器的后臺(tái)數(shù)據(jù)庫(kù)使用了SQL Server2005。</p><p> ?。?)

76、tb_user 表:</p><p>  此表主要包含了用戶(hù)帳戶(hù)基本信息。</p><p> ?。?)tb_friend表</p><p>  (3)tb_group表</p><p>  聊天系統(tǒng)采用用戶(hù)名作為用戶(hù)帳號(hào),并給每個(gè)用戶(hù)生成一個(gè)唯一ID來(lái)做系統(tǒng)內(nèi)部的用戶(hù)標(biāo)識(shí)。</p><p><b>  2.用

77、戶(hù)注冊(cè)</b></p><p>  (1)去數(shù)據(jù)庫(kù)讀數(shù)據(jù)</p><p>  首先去數(shù)據(jù)庫(kù)查詢(xún)所需注冊(cè)賬號(hào)是否存在,如果存在則注冊(cè)失敗并返回客服端信息,如果不存在則注冊(cè)成功并返回信息。</p><p>  (2)客戶(hù)端請(qǐng)求注冊(cè)</p><p>  客戶(hù)端通過(guò)Register.java請(qǐng)求注冊(cè),填寫(xiě)注冊(cè)信息,并驗(yàn)證密碼是否符合規(guī)定,

78、是否兩次輸入一致,如不一致會(huì)提示重新輸入,最后將請(qǐng)求信息發(fā)送給服務(wù)器端。</p><p><b>  // 注冊(cè)</b></p><p>  jb1.addActionListener(new ActionListener() {</p><p>  public void actionPerformed(ActionEvent e) {<

79、;/p><p><b>  // 創(chuàng)建網(wǎng)絡(luò)連接</b></p><p><b>  try {</b></p><p>  Socket socket = new Socket(QQ.IP, 10086);</p><p>  oop = new ObjectOutputStream(socket.ge

80、tOutputStream());</p><p>  oip = new ObjectInputStream(socket.getInputStream());</p><p>  } catch (Exception e1) {</p><p>  e1.printStackTrace();</p><p><b>  }<

81、;/b></p><p>  Message m = new Message("regist");</p><p>  User mine = new User();</p><p>  mine.setUser_num(jt1.getText().trim());</p><p>  mine.setUser_pa

82、ssword(jt2.getText());</p><p>  mine.setUser_name(jt3.getText());</p><p>  mine.setUser_sign(jta.getText());</p><p>  mine.setImg_path(imgPath);</p><p>  m.setU(mine);&

83、lt;/p><p><b>  try {</b></p><p>  oop.writeObject(m);</p><p>  oop.flush();</p><p>  Message toQQmenu = (Message) oip.readObject();</p><p>  JOpti

84、onPane.showMessageDialog(RegistView.this, toQQmenu</p><p>  .getMessage());</p><p><b>  new QQ();</b></p><p>  RegistView.this.dispose();</p><p>  } catch (

85、Exception e2) {</p><p>  e2.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  });</b></p><p><b>

86、  (3)服務(wù)器端響應(yīng)</b></p><p>  服務(wù)器端得到注冊(cè)請(qǐng)求會(huì)將對(duì)象輸入流轉(zhuǎn)化為文件輸出流,并反饋給客戶(hù)端。客戶(hù)端得到注冊(cè)信息后會(huì)在前臺(tái)填寫(xiě)注冊(cè)信息,然后創(chuàng)建文件輸出流,再用對(duì)象輸出流包裝后寫(xiě)入本地文件將其持久化。最后關(guān)閉對(duì)象輸出流和文件輸入流。</p><p><b>  // 注冊(cè)</b></p><p>  pub

87、lic boolean regist(Message m) {</p><p>  Message m1 = m;</p><p><b>  try{</b></p><p>  if ((m1.getU().getUser_num()) == null</p><p>  && ""

88、;.equals(m1.getU().getUser_num())) {</p><p>  m1.setMessage("QQ號(hào)不能為空!");</p><p>  oop.writeObject(m1);</p><p>  oop.flush();</p><p>  return false;</p>

89、<p>  } else if ((m1.getU().getUser_password()) == null</p><p>  && "".equals(m1.getU().getUser_password())) {</p><p>  m1.setMessage("密碼不能為空!");</p><

90、;p>  oop.writeObject(m1);</p><p>  oop.flush();</p><p>  return false;</p><p><b>  }</b></p><p>  }catch(Exception ee){</p><p>  ee.printSta

91、ckTrace();</p><p><b>  }</b></p><p>  Connection conn = DBtool.getConnection();</p><p><b>  try {</b></p><p>  PreparedStatement ps2 = conn.prep

92、areStatement("select user_num from tb_user where user_num = ? ");</p><p>  ps2.setString(1, m.getU().getUser_num());</p><p>  ResultSet r2 = ps2.executeQuery();</p><p>  i

93、f(r2!=null){</p><p>  while(r2.next()){</p><p>  if(r2.getString("user_num").equals(m.getU().getUser_num())){</p><p>  m1.setMessage("該賬號(hào)已被注冊(cè)!");</p><

94、p>  oop.writeObject(m1);</p><p>  oop.flush();</p><p>  DBtool.closeResultSet(r2);</p><p>  DBtool.closePrapaer(ps2);</p><p>  DBtool.closeConnection(conn);</p>

95、;<p>  return false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  PreparedStatement ps1 = conn.prepareState

96、ment("insert into tb_user values (?,?,?,?,?);");</p><p>  ps1.setString(1, m1.getU().getUser_num());</p><p>  ps1.setString(2, m1.getU().getUser_name());</p><p>  ps1.setS

97、tring(3, m1.getU().getUser_password());</p><p>  ps1.setString(4, m1.getU().getUser_sign());</p><p>  ps1.setString(5, m1.getU().getImg_path());</p><p>  ps1.execute();</p>&

98、lt;p>  m1.setMessage("注冊(cè)成功!");</p><p>  oop.writeObject(m1);</p><p>  oop.flush();</p><p>  DBtool.closePrapaer(ps1);</p><p>  DBtool.closeConnection(conn)

99、;</p><p>  } catch (SQLException e) {</p><p>  e.printStackTrace();</p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();</p><p><b>  }<

100、;/b></p><p>  return true;</p><p><b>  }</b></p><p>  public boolean regist2(Message m){</p><p>  Connection conn=DBtool.getConnection();</p><

101、p>  PreparedStatement pstmt = null;</p><p><b>  try {</b></p><p>  pstmt = conn.prepareStatement("update tb_user set user_nam=? ,img_path=? ,user_sign=? where user_num=?"

102、;);</p><p>  pstmt.setString(1, m.getU().getUser_name());</p><p>  pstmt.setString(2, m.getU().getImg_path());</p><p>  pstmt.setString(3, m.getU().getUser_sign());</p><p

103、>  pstmt.setString(4, m.getU().getUser_num());</p><p>  pstmt.execute();</p><p>  oop.writeObject(m);</p><p>  oop.flush();</p><p>  } catch (Exception e) {</p>

104、;<p>  e.printStackTrace();</p><p><b>  }finally{</b></p><p>  DBtool.closePrapaer(pstmt);</p><p>  DBtool.closeConnection(conn);</p><p><b>  }

105、</b></p><p>  return true;</p><p><b>  }</b></p><p>  (4)給客戶(hù)端返回信息</p><p>  將用戶(hù)注冊(cè)成功或失敗的信息用打印流包裝Socket以后,輸出給客戶(hù)端注冊(cè)結(jié)果的詳細(xì)信息。</p><p>  (5)關(guān)閉Soc

106、ket連接</p><p>  當(dāng)以上的程序都正常運(yùn)行后,需要關(guān)閉Socket連接,否則將會(huì)浪費(fèi)服務(wù)器與客戶(hù)端之間的資源。</p><p><b>  3.用戶(hù)登陸</b></p><p> ?。?)去數(shù)據(jù)庫(kù)讀用戶(hù)數(shù)據(jù)</p><p> ?。?)驗(yàn)證用戶(hù)名是否存在</p><p>  在對(duì)象數(shù)據(jù)庫(kù)

107、中查找是否有與登錄用戶(hù)的用戶(hù)名相同的記錄,如果有繼續(xù)驗(yàn)證,否則退出驗(yàn)證處理,返回“沒(méi)有此用戶(hù)”錯(cuò)誤</p><p>  用戶(hù)登陸程序模塊如下:</p><p><b>  4.用戶(hù)退出</b></p><p><b> ?。?)接收退出信息</b></p><p>  當(dāng)用戶(hù)退出時(shí),客戶(hù)端將會(huì)用基于

108、Socket的對(duì)象輸出流發(fā)送給服務(wù)器退出對(duì)象。</p><p> ?。?)在線(xiàn)列表中刪除用戶(hù)</p><p>  用戶(hù)退出后應(yīng)該把用戶(hù)從在線(xiàn)列表中刪除,否則用戶(hù)退出用戶(hù)還在在線(xiàn)列表中,么 該用戶(hù)下次將會(huì)無(wú)法登錄。</p><p><b>  (3)更新在線(xiàn)列表</b></p><p>  用

109、戶(hù)退出后將服務(wù)器端監(jiān)控界面的用戶(hù)列表更新。否則用戶(hù)數(shù)據(jù)將會(huì)不同步。</p><p><b>  用戶(hù)退出模塊程序:</b></p><p>  5.接收用戶(hù)聊天信息</p><p> ?。?)接收用戶(hù)聊天信息</p><p>  當(dāng)用戶(hù)發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶(hù)端用Socket傳輸過(guò)來(lái)的聊天信息對(duì)象,然后將其強(qiáng)制

110、轉(zhuǎn)換為Chat對(duì)象。</p><p> ?。?)接收服務(wù)器端的系統(tǒng)消息</p><p>  當(dāng)有其他用戶(hù)登陸時(shí),系統(tǒng)會(huì)給在線(xiàn)的所有用戶(hù)發(fā)送用戶(hù)登陸信息,并且通過(guò)服務(wù)器可以給各用戶(hù)發(fā)送系統(tǒng)消息。系統(tǒng)消息發(fā)出后,如再有登錄者也可以接收到系統(tǒng)消息。</p><p><b> ?。?)返回給客戶(hù)端</b></p><p>  當(dāng)

111、以上信息都封裝成功后,打開(kāi)與客戶(hù)端連接的Socket的輸出流,然后再用ObjectOutputStream對(duì)象輸出流包裝后輸出給客戶(hù)端。</p><p>  第三節(jié) 客戶(hù)端程序編寫(xiě)</p><p>  程序?qū)⑼ㄟ^(guò)RegistView.java用戶(hù)注冊(cè)界面收集用戶(hù)的用戶(hù)名、密碼、呢稱(chēng)、個(gè)性簽名。</p><p><b>  圖4.3 注冊(cè)界面</b&g

112、t;</p><p>  客戶(hù)端用戶(hù)注冊(cè)信息模塊程序:</p><p><b>  第四節(jié) 用戶(hù)登錄</b></p><p>  一、收集用戶(hù)登錄信息</p><p>  程序?qū)⑼ㄟ^(guò)QQ.java用戶(hù)登錄界面收集用戶(hù)的用戶(hù)名、密碼,如圖</p><p><b>  圖4.4 登錄界面&l

113、t;/b></p><p><b>  第五節(jié) 聊天室</b></p><p>  當(dāng)用戶(hù)登錄成功后,用戶(hù)的登錄界面將會(huì)隱藏,然后創(chuàng)建用戶(hù)聊天室窗口,在界面的標(biāo)題欄將會(huì)顯示當(dāng)前登錄用戶(hù)的用戶(hù)名。</p><p>  位于界面下方的就是一些用于聊天的功能控件和聊天內(nèi)容個(gè)性化配置控件。包括聊天對(duì)象,聊天語(yǔ)氣,聊天內(nèi)容,聊天字體,風(fēng)格,大小,顏

114、色…….</p><p><b>  一、用戶(hù)發(fā)送信息</b></p><p>  用戶(hù)需要發(fā)送信息時(shí),在聊天內(nèi)容里寫(xiě)下要發(fā)送的信息,然后點(diǎn)擊發(fā)送就可以發(fā)送到其他客戶(hù)端,可以選擇聊天表情,聊天信息通過(guò)服務(wù)器發(fā)送到其他客戶(hù)端。如圖:</p><p><b>  圖4.5 聊天界面</b></p><p&g

115、t;  // 定義jb1發(fā)送按鈕事件</p><p>  jb1.addActionListener(new ActionListener() {</p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p

116、>  if (jta2.getText() == null || "".equals(jta2.getText())) {</p><p>  jta2.setText("發(fā)送內(nèi)容不能為空!");</p><p><b>  } else {</b></p><p>  picVector = ne

117、w Vector<Icon>();</p><p>  mesVector = new Vector<Object>();</p><p>  Message m = new Message("chat");</p><p>  for (int i = 0; i < jta2.getStyledDocument()

118、</p><p>  .getRootElements()[0].getElement(0)</p><p>  .getElementCount(); i++) {</p><p>  Icon icon = StyleConstants.getIcon(jta2</p><p>  .getStyledDocument().getRoot

119、Elements()[0]</p><p>  .getElement(0).getElement(i).getAttributes());</p><p>  if (icon != null) {</p><p>  picVector.add(icon);</p><p><b>  }</b></p>

120、<p><b>  }</b></p><p>  int k = 0;</p><p>  for (int i = 0; i < jta2.getStyledDocument().getLength(); i++) {</p><p>  if (jta2.getStyledDocument().getCharacter

121、Element(i)</p><p>  .getName().equals("icon")) {</p><p>  mesVector.add(picVector.get(k));</p><p><b>  k++;</b></p><p><b>  } else {</b&g

122、t;</p><p><b>  try {</b></p><p>  mesVector.add(jta2.getStyledDocument().getText(i, 1));</p><p>  } catch (BadLocationException e1) {</p><p>  e1.printStack

123、Trace();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  m.setMesVector(mesVector);</p><p>  m.setPicVec

124、tor(picVector);</p><p>  m.setFriend_num(utofriend.getUser_num());</p><p>  m.setMy_num(mine.getUser_num());</p><p>  m.setArr(zt.getFontAttrib().getAttrSet());</p><p>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論