版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p> 基于JAVA的聊天室的設(shè)計(jì)與實(shí)現(xiàn)—客戶端</p><p><b> 摘要</b></p><p> 隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)聊天工具作為一種交流工具,已
2、經(jīng)受到網(wǎng)民的青睞。目前,出現(xiàn)了很多功能強(qiáng)大的聊天工具,其中應(yīng)用比較廣泛的有騰訊QQ、MSN-Messager等等。</p><p> 這個(gè)項(xiàng)目是用Java技術(shù)制作的,其中Java是一種程序設(shè)計(jì)語(yǔ)言,它具有簡(jiǎn)單的、面向?qū)ο?、分布式、健壯性、安全性、可移植性等特點(diǎn),并且提供了多線程的功能,使得在一個(gè)程序里可同時(shí)執(zhí)行多個(gè)小任務(wù),開(kāi)發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí),如TCP/IP協(xié)議、客戶端/服務(wù)器端模式(Cli
3、ent/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。在網(wǎng)絡(luò)編程中對(duì)信息的讀取、發(fā)送,是利用流來(lái)實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過(guò)分析這些情況,該局域網(wǎng)聊天工具采用Eclipse為基本開(kāi)發(fā)環(huán)境和Java語(yǔ)言進(jìn)行編寫(xiě),首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修正和改進(jìn),同時(shí),采用多線程、多任務(wù)的設(shè)計(jì)思想,開(kāi)發(fā)出性能穩(wěn)定,功能全面的服務(wù)器。完整的實(shí)現(xiàn)系統(tǒng)的功能。通過(guò)
4、本次畢業(yè)設(shè)計(jì)可以學(xué)到如何應(yīng)用和實(shí)現(xiàn)面向?qū)ο蟮母鞣N方法,如何使用Eclipse集成開(kāi)發(fā)環(huán)境來(lái)創(chuàng)建和開(kāi)發(fā)項(xiàng)目,從而完整的實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。</p><p> 該系統(tǒng)主要包括了服務(wù)器端和客戶端界面使用兩部分,其中服務(wù)器端用來(lái)接收新用戶的注冊(cè)和注冊(cè)用戶的登錄驗(yàn)證以及進(jìn)行服務(wù)器信息和用戶信息的管理,其中用到了Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶端發(fā)來(lái)的信息??蛻舳送ㄟ^(guò)注冊(cè)界面讓新用戶進(jìn)行注冊(cè);通過(guò)登錄界
5、面使用已注冊(cè)的用戶名和密碼登錄到聊天服務(wù)器;用戶通過(guò)登錄驗(yàn)證后即可進(jìn)行在線聊天。多用戶的即時(shí)聊天功能必須使用Thread類來(lái)建立多線程。本聊天系統(tǒng)采用Eclipse為基本的開(kāi)發(fā)環(huán)境,用java語(yǔ)言進(jìn)行程序的編寫(xiě)的。</p><p> 關(guān)鍵詞:客戶端/服務(wù)器,多線程,聊天,socket</p><p><b> ABSTRACT</b></p><
6、;p> With the development of the Internet, the chat tool as a communication tool, has been popularly accepted by netizens of all ages. At present, there are many powerful chat tools, of which Tencent QQ,MSN - Messager
7、 are much more prevalent.</p><p> This project is with Java technology produced of, which Java is a programming language, it has simple of, and-oriented object, and distributed, and robust sexual, and secur
8、ity, and portability, features, and provides has multithreaded of features, makes in a program in can while implementation multiple small task, development in the using has computer network programming of basic theory kn
9、owledge, as TCP/IP agreement, and client/server end mode (Client/Server mode), and network programming of de</p><p> The system includes both server-side and client-side interface uses two main parts, which
10、 server to use for new user registrations and registered user login authentication, and server information and user information management, which was used to establish Server Socket , the server can read the message, for
11、warded to the client. Registered by the client interfaces to register new users through login with a registered username and password to log on to the chat server; after user login authentica</p><p> Key wo
12、rds: Client / server, multiple threads, chat, socket</p><p><b> 目錄</b></p><p><b> 1.緒論1</b></p><p><b> 1.1課題背景1</b></p><p> 1
13、.2課題研究的目的和意義1</p><p> 1.3國(guó)內(nèi)外概況2</p><p> 1.4課題的主要研究工作2</p><p> 2. 系統(tǒng)開(kāi)發(fā)環(huán)境與實(shí)用技術(shù)2</p><p> 2.1 本課題開(kāi)發(fā)環(huán)境的選擇2</p><p> 2.2本課題開(kāi)發(fā)工具的選擇3</p><p>
14、; 2.3 Socket技術(shù)4</p><p> 2.4 多線程技術(shù)4</p><p> 3. 系統(tǒng)的分析與設(shè)計(jì)5</p><p> 3.1系統(tǒng)的總體需求5</p><p> 3.2客戶端的功能6</p><p><b> 3.3流程設(shè)計(jì)7</b></p>&
15、lt;p> 3.4分析Socket在客戶端的開(kāi)發(fā)流程8</p><p> 3.5系統(tǒng)的設(shè)計(jì)方案8</p><p> 3.6 性能需求分析10</p><p> 4. 系統(tǒng)的實(shí)現(xiàn)10</p><p> 4.1系統(tǒng)的模塊分析10</p><p> 4.2主要引入的包10</p>
16、<p> 4.3主要代碼11</p><p> 4.4界面設(shè)計(jì)14</p><p><b> 5. 總結(jié)17</b></p><p><b> 參考文獻(xiàn)18</b></p><p><b> 致謝18</b></p><p>
17、;<b> 緒論</b></p><p> 隨著信息科學(xué)的進(jìn)步與互聯(lián)網(wǎng)絡(luò)的發(fā)展,雖然通過(guò)網(wǎng)絡(luò)的聊天軟件很多,但針對(duì)于內(nèi)部系統(tǒng)的、局域網(wǎng)內(nèi)的聊天和公司內(nèi)部的上下級(jí)溝通的聊天通訊軟件卻很少。所以開(kāi)發(fā)一個(gè)此類型的即時(shí)通訊系統(tǒng)就變得非常有意義了。而在技術(shù)選擇上Java技術(shù)自然成為實(shí)現(xiàn)此系統(tǒng)的首選。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基于JAVA編程語(yǔ)言開(kāi)發(fā)設(shè)計(jì)的,其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成消息的傳遞,
18、且具有高效的交互性,能更有效的處理客戶請(qǐng)求,其運(yùn)行時(shí)所需環(huán)境及工作流程和各模塊的工作原理將在本文依次介紹,并且文中提供了部分程序源代碼。</p><p><b> 1.1課題背景</b></p><p> 在這個(gè)信息極其發(fā)達(dá)的時(shí)代,我們目前可以用來(lái)進(jìn)行信息交流的方法也非常多,比如電報(bào)、電話、電子郵件等通訊手段,但是這些或者不方便或者有局限性或者有費(fèi)用的問(wèn)題,比如電
19、話就是屬于費(fèi)用比較高的一種方式,電子郵件則不是一種及時(shí)聯(lián)系的手段,需要一定時(shí)間才能到達(dá),只能作為一種輔助交流的手段。但是,聊天室這個(gè)就能很好的解決這個(gè)問(wèn)題,大家可以各自在不同的地點(diǎn)就可以在聊天室中發(fā)言,大家互相討論,而且好的聊天室還有各種表情符號(hào)等可以加強(qiáng)我們的表達(dá),并且費(fèi)用低廉,信息交流速度快,只有這樣,才能在這個(gè)涌動(dòng)的社會(huì)中加強(qiáng)聯(lián)系,創(chuàng)造出更多的財(cái)富。</p><p> 1.2課題研究的目的和意義</
20、p><p> 近年來(lái),隨著Internet的迅速崛起,互聯(lián)網(wǎng)已日益成為收集提供信息的最佳渠道并逐步進(jìn)入傳統(tǒng)的流通領(lǐng)域。于是網(wǎng)絡(luò)聊天室開(kāi)始流行起來(lái),越來(lái)越多的用戶通過(guò)網(wǎng)絡(luò)聊天暢談自己的心扉。</p><p> 隨著越來(lái)越多的應(yīng)用人群,開(kāi)發(fā)一個(gè)網(wǎng)絡(luò)聊天室是極其有意義的。本課題主要介紹的是基于JAVA的網(wǎng)絡(luò)聊天室的開(kāi)發(fā)設(shè)計(jì),其主要功能是能夠動(dòng)態(tài)、實(shí)時(shí)的完成信息的傳遞,并且具有高效的交互性和有效的
21、處理用戶請(qǐng)求,易于維護(hù)和更新。</p><p> 為了更好的充實(shí)人們的生活,我特做此系統(tǒng)更滿足人們?cè)谌粘I畹男枰托枨螅矠榱藵M足人們?cè)谛畔⒘魍ǚ矫娴姆奖?,使得人們更能分享互?lián)網(wǎng)上的資源,使得的網(wǎng)絡(luò)的意義更能充分的體現(xiàn)。</p><p> 交流是系統(tǒng)的關(guān)鍵也是目的,它能讓你在簡(jiǎn)單的對(duì)話中了解復(fù)雜的社會(huì),多彩的世界,使得人與人之間的距離徹底拉近,就像是面對(duì)面的交談,彼此之間沒(méi)有界限,沒(méi)
22、有差別,只有心與心的共振。</p><p><b> 1.3國(guó)內(nèi)外概況</b></p><p> 目前國(guó)內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國(guó)內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國(guó)外有著名的MSN以及跨平臺(tái)Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開(kāi)發(fā)聊天系統(tǒng)的準(zhǔn)備。騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通訊市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速
23、占市場(chǎng)之后,其在國(guó)內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對(duì)微軟MSN的強(qiáng)大攻勢(shì),騰訊QQ的時(shí)常占有率依然穩(wěn)步增長(zhǎng)。騰訊的成功與其對(duì)QQ的不斷創(chuàng)新和完善是分不開(kāi)的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過(guò)觀察騰訊QQ運(yùn)行時(shí)的各種細(xì)節(jié)??梢源_定騰訊QQ是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間UDP直連通信的。并且在兩個(gè)客戶端之間不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。</p><p> 1.4課題的主要研
24、究工作</p><p> 本系統(tǒng)是一個(gè)典型的聊天系統(tǒng)。該程序分兩大部分來(lái)編寫(xiě),服務(wù)器端和客戶端。服務(wù)器端用來(lái)響應(yīng)客戶端所發(fā)出的請(qǐng)求,并把接受到客戶端的響應(yīng)分別作出響應(yīng)的處理??蛻舳擞脕?lái)接收用戶的請(qǐng)求,然后做出相應(yīng)的操作。</p><p> 其中網(wǎng)絡(luò)傳輸?shù)膶?shí)現(xiàn)和多線程技術(shù)是此聊天系統(tǒng)的核心部分,而Java提供的API函數(shù)中針對(duì)網(wǎng)絡(luò)編程的Socket類正是針對(duì)網(wǎng)絡(luò)編程的,Java語(yǔ)言是一種
25、支持多線程的語(yǔ)言,多線程在服務(wù)器端主要是要滿足支持多個(gè)用戶的同時(shí)登陸,在客戶端主要滿足一對(duì)多的同時(shí)聊天。</p><p> 2. 系統(tǒng)開(kāi)發(fā)環(huán)境與實(shí)用技術(shù)</p><p> 2.1 本課題開(kāi)發(fā)環(huán)境的選擇</p><p> 在進(jìn)行開(kāi)發(fā)之前,首先決定的第一個(gè)問(wèn)題就是該使用什么開(kāi)發(fā)環(huán)境來(lái)編寫(xiě),以目前常用的開(kāi)發(fā)語(yǔ)言來(lái)講有C/C++、NET技術(shù)、JAVA、VB幾種。還有E
26、clipse、JBuilder等,這些并不是語(yǔ)言,而是程序在構(gòu)建程序時(shí)的“集成開(kāi)發(fā)工具”,不過(guò)它們?cè)陂_(kāi)發(fā)設(shè)計(jì)的過(guò)程中也占有相應(yīng)重要的角色,因?yàn)檫x用正確的集成開(kāi)發(fā)工具,可以加速程序設(shè)計(jì)的進(jìn)行、測(cè)試與排錯(cuò),因而對(duì)整體進(jìn)度具有決定性的影響。</p><p> 1、就執(zhí)行平臺(tái)而言,必須考慮的問(wèn)題之一是用戶可能使用的操作系統(tǒng)。用戶可能使用的是Windows和Linux。JAVA語(yǔ)言具有平臺(tái)無(wú)關(guān)性,可以不需要任何修改就可以
27、運(yùn)行在支持JAVA的任何計(jì)算機(jī)上。</p><p> 2、JAVA的Swing組件開(kāi)發(fā)技術(shù)可以開(kāi)發(fā)豐富的圖形界面,并且Swing API類提供了豐富的外部接口和方法,可以方便實(shí)現(xiàn)系統(tǒng)功能。</p><p> 3、就項(xiàng)目開(kāi)發(fā)而言,純粹的面向?qū)ο?,加上?shù)量巨大的類所提供的方法庫(kù)的支持,使得利用JAVA開(kāi)發(fā)各種應(yīng)用程序,可以說(shuō)是易如反掌。此外,在程序除錯(cuò)、修改、升級(jí)和增加新功能等方面,因其面
28、向?qū)ο蟮奶匦裕沟眠@些維護(hù)也變得非常容易。</p><p> 4、JAVA支持內(nèi)在的多線程運(yùn)行,提供分布式的并發(fā)機(jī)制,運(yùn)行效率高。</p><p> 5、異常處理,為了使Java程序更穩(wěn)定、更安全,Java引入了異常處理機(jī)制。能夠在程序中產(chǎn)生異常情況的地方,執(zhí)行相應(yīng)的處理,不至于因突發(fā)或意外的錯(cuò)誤造成執(zhí)行中斷或是死機(jī)。通過(guò)這種異常處理,不僅能夠清晰地掌握整個(gè)程序執(zhí)行的流程,也使得程序的
29、設(shè)計(jì)更為嚴(yán)謹(jǐn)。</p><p> 6、高性能,Java可以在運(yùn)行時(shí)直接將目標(biāo)代碼翻譯成機(jī)器指令。Sun用直接解釋器一秒鐘內(nèi)可調(diào)用300,000個(gè)過(guò)程。翻譯目標(biāo)代碼的速度與C/C++的性能沒(méi)什么區(qū)別。</p><p> 7、網(wǎng)絡(luò)功能,Java可以說(shuō)是借助因特網(wǎng)而重獲新生的,自然具備編寫(xiě)網(wǎng)絡(luò)功能的程序。不論是一般因特網(wǎng)/局域網(wǎng)的程序,如Socket、Email、基于Web服務(wù)器的Servl
30、et、JSP程序,甚至連分布式網(wǎng)絡(luò)程序,如CORBA、RMI等的支持也是非常豐富的,使用起來(lái)也很方便。</p><p> 8、源回收處理,Garbage Collection是由JVM對(duì)內(nèi)存實(shí)行動(dòng)態(tài)管理的。程序需要多少內(nèi)存、哪些程序的內(nèi)存已經(jīng)不使用了,需要釋放歸還給系統(tǒng),這些煩瑣且危險(xiǎn)的操作全部交由JVM去管理。讓我們能夠更專心地編寫(xiě)程序,而不需要擔(dān)心內(nèi)存的問(wèn)題。內(nèi)存的統(tǒng)一管理,對(duì)于跨平臺(tái)也有相當(dāng)大的幫助。&l
31、t;/p><p> 2.2本課題開(kāi)發(fā)工具的選擇</p><p> Java的開(kāi)發(fā)工具有很多,而且各有優(yōu)缺點(diǎn),Eclipse是一個(gè)開(kāi)放可擴(kuò)展的集成開(kāi)發(fā)環(huán)境(IDE)。它不僅可以用于Java的開(kāi)發(fā),通過(guò)開(kāi)發(fā)插件,它可以構(gòu)建其他的開(kāi)發(fā)工具。Eclipse是開(kāi)放源代碼的項(xiàng)目,并可以免費(fèi)下載。支持最新的Java標(biāo)準(zhǔn),并且縮短了開(kāi)發(fā)周期。一直以其友好的集成開(kāi)發(fā)環(huán)境在業(yè)界受到廣泛的贊譽(yù),這也是Eclip
32、se一直是廣大程序員最喜愛(ài)的Java開(kāi)發(fā)工具的原因之一。</p><p> Eclipse的可視化集成開(kāi)發(fā)環(huán)境包括文本編輯、工程創(chuàng)建工具、對(duì)象瀏覽器和調(diào)試器等。用戶可以在集成開(kāi)發(fā)環(huán)境中創(chuàng)建工程和打開(kāi)功能,建立、打開(kāi)和編輯文件,并可以編譯、運(yùn)行和調(diào)試應(yīng)用程序。可以說(shuō)在Eclipse集成開(kāi)發(fā)環(huán)境中開(kāi)發(fā)Java程序,快速而且高效。其主要特點(diǎn)如下:</p><p><b> 開(kāi)放的可
33、擴(kuò)展IDE</b></p><p> 成功的底層圖形界面API</p><p><b> 強(qiáng)大的插件加載功能</b></p><p> 可以通過(guò)導(dǎo)入一些CVS相關(guān)的插件來(lái)實(shí)現(xiàn)版本管理的便易性</p><p> 2.3 Socket技術(shù)</p><p><b> So
34、cket概述</b></p><p> 套接字(Socket)技術(shù)用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶端程序和服務(wù)器端程序之間的連接,即網(wǎng)絡(luò)上兩個(gè)以雙工方式通信的進(jìn)程之間的連接端點(diǎn)稱為套接字。套接字相對(duì)URL而言是在較低層次上進(jìn)行通信。</p><p> 套接字是TCP/IP中的基本概念,它的作用類似于日常使用的插座,主要用來(lái)實(shí)現(xiàn)將TCP/IP包發(fā)送到指定的IP地址。通過(guò)TCP/IP Soc
35、ket可以實(shí)現(xiàn)可靠、雙向、一致、點(diǎn)對(duì)點(diǎn)、基于流的主機(jī)和Internet之間的連接。使用Socket可以用來(lái)連接Java的I/O系統(tǒng)到其他程序,這些程序可以在本地計(jì)算機(jī)上,也可以在Internet的遠(yuǎn)程計(jì)算機(jī)上。</p><p> 利用Socket實(shí)現(xiàn)數(shù)據(jù)傳送的基本原理</p><p> 服務(wù)器程序啟動(dòng)后,服務(wù)器應(yīng)用程序偵聽(tīng)特定端口,等待客戶的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶和服務(wù)器
36、之間建立一個(gè)通信連接,在連接過(guò)程中,客戶被分配一個(gè)本地端口號(hào)與一個(gè)Socket連接,客戶通過(guò)寫(xiě)Socket來(lái)通知服務(wù)器,服務(wù)器通過(guò)讀Socket來(lái)獲取信息。類似地,服務(wù)器也獲取一個(gè)本地端口號(hào),它需要一個(gè)新的端口號(hào)來(lái)偵聽(tīng)原始端口上的其他連接請(qǐng)求。服務(wù)器也給它的本地端口連接一個(gè)Socket并讀寫(xiě)它,以便與客戶通信。</p><p> 應(yīng)用程序一般僅在同一類的套接字之間通訊。不過(guò)只要底層的通信協(xié)議允許,不同類型的套接
37、字之間也可以通信。</p><p> 套接字(Socket)的類型</p><p> Java中套接字一般有兩種類型:TCP套接字和UDP套接字。</p><p> TCP 和 UDP 扮演相同角色,但做法不同。兩者都接收傳輸協(xié)議數(shù)據(jù)包并將其內(nèi)容向前傳送到表示層。</p><p> TCP 把消息分解成數(shù)據(jù)包(數(shù)據(jù)報(bào),datagram
38、s)并在接收端以正確的順序把它們重新裝配起來(lái)。TCP 還處理對(duì)遺失數(shù)據(jù)包的重傳請(qǐng)求。有了 TCP,位于上層的層要擔(dān)心的事情就少多了。</p><p> UDP 不提供裝配和重傳請(qǐng)求這些功能。它只是向前傳送信息包。位于上層的層必須確保消息是完整的并且是以正確的順序裝配的。</p><p> 一般而言,UDP 強(qiáng)加給您的應(yīng)用程序的性能開(kāi)銷更小,但只在應(yīng)用程序不會(huì)突然交換大量數(shù)據(jù)并且不必裝配
39、大量數(shù)據(jù)報(bào)以完成一條消息的時(shí)候。否則,TCP 才是最簡(jiǎn)單或許也是最高效的選擇。</p><p><b> 2.4 多線程技術(shù)</b></p><p> 多線程,是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計(jì)算機(jī)因有硬件支持而能夠在同一時(shí)間運(yùn)行多于一個(gè)線程,進(jìn)而提升整體處理效能。具有這種能力的系統(tǒng)包括對(duì)稱多處理機(jī)、多內(nèi)核處理器以及芯片級(jí)多處理(C
40、hip-level multithreading)或同時(shí)多線程(Simultaneous multithreading)處理器。</p><p><b> 多線程概述</b></p><p> 多線程是這樣一種機(jī)制,它允許在程序中并發(fā)執(zhí)行多個(gè)指令流,每個(gè)指令流都稱為一個(gè)線程,彼此間互相獨(dú)立。</p><p> 線程又稱為輕量級(jí)進(jìn)程,它和進(jìn)
41、程一樣擁有獨(dú)立的執(zhí)行控制,由操作系統(tǒng)負(fù)責(zé)調(diào)度,區(qū)別在于線程沒(méi)有獨(dú)立的存儲(chǔ)空間,而是和所屬進(jìn)程中的其它線程共享一個(gè)存儲(chǔ)空間,這使得線程間的通信遠(yuǎn)較進(jìn)程簡(jiǎn)單。</p><p> 多個(gè)線程的執(zhí)行是并發(fā)的,也就是在邏輯上“同時(shí)”,而不管是否是物理上的“同時(shí)”。如果系統(tǒng)只有一個(gè)CPU,那么真正的“同時(shí)”是不可能的,但是由于CPU的速度非??欤脩舾杏X(jué)不到其中的區(qū)別,因此我們也不用關(guān)心它,只需要設(shè)想各個(gè)線程是同時(shí)執(zhí)行即可。
42、</p><p> 多線程和傳統(tǒng)的單線程在程序設(shè)計(jì)上最大的區(qū)別在于,由于各個(gè)線程的控制流彼此獨(dú)立,使得各個(gè)線程之間的代碼是亂序執(zhí)行的。</p><p> 在Java中實(shí)現(xiàn)多線程</p><p> Java提供了類java.lang.Thread來(lái)方便多線程編程,這個(gè)類提供了大量的方法來(lái)方便我們控制自己的各個(gè)線程,我們以后的討論都將圍繞這個(gè)類進(jìn)行。</p&
43、gt;<p> 那么如何提供給 Java 我們要線程執(zhí)行的代碼呢?讓我們來(lái)看一看 Thread 類。Thread 類最重要的方法是run(),它為T(mén)hread類的方法start()所調(diào)用,提供我們的線程所要執(zhí)行的代碼。為了指定我們自己的代碼,只需要覆蓋它!</p><p> 方法:繼承 Thread 類,覆蓋方法 run(),我們?cè)趧?chuàng)建的 Thread 類的子類中重寫(xiě) run() ,加入線程所要
44、執(zhí)行的代碼即可。</p><p> 3. 系統(tǒng)的分析與設(shè)計(jì)</p><p> 3.1系統(tǒng)的總體需求</p><p> 人們?nèi)粘I钪性絹?lái)越多地使用新技術(shù)來(lái)為自己的工作和學(xué)習(xí)服務(wù)。一個(gè)操作簡(jiǎn)單、界面友好、運(yùn)行穩(wěn)定的網(wǎng)絡(luò)聊天室對(duì)于小型局域網(wǎng)內(nèi)的用戶可以起到很好的交流作用。本聊天系統(tǒng)就是一個(gè)用于局域網(wǎng)的聊天系統(tǒng),雖然聊天的基本功能和許多大型的聊天室相比該聊天系統(tǒng)比較
45、簡(jiǎn)單,但能實(shí)現(xiàn)聊天的基本功能,可以公聊和私聊等,基于時(shí)間和技術(shù)的原因,很遺憾傳送文件的功能尚未實(shí)現(xiàn)。</p><p> 服務(wù)器端主要完成兩個(gè)功能:服務(wù)器信息管理和用戶信息管理。服務(wù)器端啟動(dòng)服務(wù)器與客戶端進(jìn)行連接。</p><p> 客戶端主要實(shí)現(xiàn)三個(gè)方面的功能:用戶注冊(cè)、用戶登錄和用戶聊天。客戶端申請(qǐng)與服務(wù)器端建立連接,當(dāng)客戶斷與服務(wù)器端建立連接通道后就可以向服務(wù)器端發(fā)送登陸信息,然后
46、客戶端完成信息的編輯、發(fā)送和接受功能。</p><p> 圖3.1系統(tǒng)的功能模塊</p><p><b> 3.2客戶端的功能</b></p><p> 服務(wù)器程序啟動(dòng)后,服務(wù)器應(yīng)用程序偵聽(tīng)特定端口,等待客戶的連接請(qǐng)求,當(dāng)一個(gè)連接請(qǐng)求到達(dá)時(shí),客戶和服務(wù)器之間建立一個(gè)通信連接,連接成功后同時(shí)連接到服務(wù)器端的兩個(gè)已注冊(cè)用戶就可以在聊天室進(jìn)行聊
47、天。</p><p><b> 3.2.1用戶注冊(cè)</b></p><p> 用戶可以通過(guò)提供基本信息注冊(cè)成為本聊天系統(tǒng)的合法用戶。</p><p> ?。?)判斷用戶名、密碼、頭像、年齡等信息是否不為空。</p><p> (2)判斷輸入密碼與判斷密碼是否一致。</p><p> ?。?)
48、判斷電子郵件是否為合法電子郵件。</p><p><b> 3.2.2用戶登錄</b></p><p> 注冊(cè)用戶可以通過(guò)輸入用戶名和密碼登錄聊天系統(tǒng)以便與其他用戶聊天。</p><p> ?。?)判斷用戶名是否存在。</p><p> ?。?)判斷登錄的用戶名和密碼是否正確。</p><p>
49、; ?。?)退出登錄程序。</p><p> ?。?)進(jìn)入注冊(cè)程序。</p><p><b> 3.2.3用戶聊天</b></p><p> 登錄聊天系統(tǒng)的用戶可以進(jìn)行群聊或者私聊。</p><p> ?。?)可以向登錄聊天系統(tǒng)的個(gè)用戶發(fā)送聊天信息進(jìn)行群聊。</p><p> ?。?)可以向指
50、定登錄聊天系統(tǒng)用戶發(fā)送信息進(jìn)行私聊。</p><p> (3)可以查看時(shí)鐘。</p><p> ?。?)可以保存用戶聊天記錄。</p><p> ?。?)可以清除屏幕信息。</p><p><b> 3.3流程設(shè)計(jì)</b></p><p><b> 是</b></
51、p><p><b> 否</b></p><p><b> 否</b></p><p><b> 是</b></p><p><b> 否</b></p><p><b> 是</b></p>
52、<p><b> 否 </b></p><p><b> 是</b></p><p> 圖3.2 聊天系統(tǒng)流程圖</p><p> 3.4分析Socket在客戶端的開(kāi)發(fā)流程</p><p> Socket(套接字)用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶端程序和服務(wù)器端程序之間的連接。</
53、p><p> 客戶端Socket應(yīng)用程序與服務(wù)器端Socket應(yīng)用程序的流程很相似,最大的差別在于:</p><p> ?。?) 服務(wù)器端Socket應(yīng)用程序主要用于偵聽(tīng)及接收客戶端的連接,而客戶端Socket應(yīng)用程序則用于嘗試與服務(wù)器端建立連接。</p><p> ?。?) 客戶端Socket應(yīng)用程序發(fā)送信息指令至服務(wù)器端,并接收服務(wù)器端所返回的結(jié)果;而服務(wù)器端
54、Socket應(yīng)用程序則處理指令邏輯,并將結(jié)果或錯(cuò)誤信息發(fā)送至客戶端。</p><p> 客戶端應(yīng)用程序首先通過(guò)socket函數(shù)建立客戶端的socket,其主要目的是與指令的服務(wù)器端(指定主機(jī)的IP地址及通信端口號(hào))建立連接,此操作由connect來(lái)完成。當(dāng)服務(wù)器端收到connect的連接請(qǐng)求時(shí),則由服務(wù)器端建立連接。</p><p> 建立客戶端Socket應(yīng)用程序的步驟大致如下:&l
55、t;/p><p> ?。?)建立客戶端的Socket,在建立時(shí)需指定欲連接服務(wù)器端的主機(jī)名稱(或IP地址)與Internet服務(wù)的通信端口。</p><p> ?。?)發(fā)送特定信息或指令至服務(wù)器端。</p><p> (3)接收服務(wù)器端返回的執(zhí)行結(jié)果或錯(cuò)誤信息,并以特定格式顯示。</p><p> ?。?)當(dāng)客戶端不需要服務(wù)器端的處理時(shí),便關(guān)閉
56、Socket通信連接。</p><p> 3.5系統(tǒng)的設(shè)計(jì)方案</p><p> 聊天系統(tǒng)的設(shè)計(jì)跟普通的網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫(huà)設(shè)計(jì)等等,而聊天室只要提供滿足訪客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):</p><p><b> 實(shí)現(xiàn)思
57、想</b></p><p><b> 3.5.1實(shí)現(xiàn)思想</b></p><p> 在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。</p><p&g
58、t; 3.5.2客戶端工作流程</p><p> 客戶端程序相對(duì)簡(jiǎn)單,只需要建立一個(gè)Socket與服務(wù)器端連接,成功后通過(guò)這個(gè)Socket來(lái)發(fā)送和接收數(shù)據(jù)就可以了。</p><p> 系統(tǒng)采用客戶/服務(wù)器模式(如圖)</p><p> 圖3.3 客戶和服務(wù)器之間的傳輸</p><p> 在服務(wù)器端程序中,首先通過(guò)ServerUI啟動(dòng)
59、服務(wù)器,然后通過(guò)QqServer等待客戶端的連接。當(dāng)收到來(lái)自客戶端的連接請(qǐng)求時(shí),便通過(guò)QqServerThread線程建立與客戶端的連接。</p><p> 客戶端的應(yīng)用程序與服務(wù)器段Socket應(yīng)用程序的流程很相似,最大的區(qū)別在于:</p><p> ?。?) 服務(wù)器端Socket應(yīng)用程序主要用于偵聽(tīng)及接收客戶端的連接,而客戶端Socket應(yīng)用程序則用于嘗試與服務(wù)器端建立連接。<
60、/p><p> ?。?) 客戶端Socket應(yīng)用程序發(fā)送信息指令至服務(wù)器端,并接收服務(wù)器端返回的結(jié)果;而服務(wù)器端Socket應(yīng)用程序則處理指令邏輯,并將結(jié)果或錯(cuò)誤信息發(fā)送至客戶端。</p><p> 其中里面也用到了TCP傳輸協(xié)議,TCP協(xié)議是TCP/IP的傳輸層提供用于主機(jī)間傳輸數(shù)據(jù)的傳輸協(xié)議。</p><p> TCP(Transmission Control
61、Protocol)為面向鏈接的通信協(xié)議,其主要目的是提供大量數(shù)據(jù)的傳輸并確保傳輸無(wú)誤,具有錯(cuò)誤偵測(cè)、數(shù)據(jù)復(fù)原及數(shù)據(jù)重送等功能。</p><p> TCP在傳輸數(shù)據(jù)之前,會(huì)先在主機(jī)間(例如服務(wù)器端和客戶端)建立通信鏈接,通過(guò)此通信鏈接,數(shù)據(jù)可在計(jì)算機(jī)間傳輸,如圖3.3所示。</p><p><b> 發(fā)送請(qǐng)求</b></p><p><
62、b> 確認(rèn)請(qǐng)求</b></p><p><b> 建立通信</b></p><p> 客戶端 服務(wù)器端</p><p> 圖3.4 TCP通信協(xié)議</p><p> 3.6 性能需求分析 </p><p> (1
63、)可靠性高,能在由于系統(tǒng)問(wèn)題或其它原因產(chǎn)生錯(cuò)誤后,作出相對(duì)應(yīng)處理,使程序具有較高的容錯(cuò)性能。</p><p> (2)宜操作性,程序簡(jiǎn)單易懂,容易上手使用。設(shè)計(jì)界面是簡(jiǎn)化界面,模擬 QQ 等現(xiàn)有即時(shí)通訊工具的界面,使用戶能很容易看懂并使用。 </p><p> ?。?)開(kāi)發(fā)文檔易理解,保證以后自己二次開(kāi)發(fā)或他人接手開(kāi)發(fā)時(shí),能夠清晰的理解整個(gè)系統(tǒng)的設(shè)計(jì)思路和實(shí)現(xiàn)細(xì)節(jié)。 </p>
64、<p> (4)模塊化設(shè)計(jì)此軟件的功能,不同的模塊實(shí)現(xiàn)不同的功能,使得軟件易于以后的維護(hù)與擴(kuò)展,方便于在工作中的應(yīng)用。 </p><p><b> 4. 系統(tǒng)的實(shí)現(xiàn)</b></p><p> 4.1系統(tǒng)的模塊分析</p><p> 本系統(tǒng)主要有系統(tǒng)的登錄(Login.java)、系統(tǒng)的注冊(cè)(Register.java)、聊
65、天室(ChatRoom.java)、服務(wù)器程序(AppServer.java)和服務(wù)器與客戶端的連接程序(Connection.java)、服務(wù)器的框架程序(FrameServer.java)。</p><p> 現(xiàn)在主要來(lái)介紹客戶端的幾個(gè)程序的實(shí)現(xiàn):</p><p> Login.java是系統(tǒng)的登錄程序,主要用到了AWT的圖形用戶界面和Java的事件處理。其主要功能包括獲取用戶名和
66、密碼以及驗(yàn)證用戶名密碼是否正確等,同時(shí)可以進(jìn)入逐層界面。</p><p> Register.java為用戶的注冊(cè)程序,用戶通過(guò)輸入相關(guān)信息注冊(cè)成聊天系統(tǒng)用戶的功能。用戶填寫(xiě)完信息后點(diǎn)擊確定按鈕將進(jìn)行驗(yàn)證,如:用戶名不能為空,兩次密碼應(yīng)一致,年齡必須為合法年齡,電子郵件必須為合法的電子郵件格式。點(diǎn)擊返回按鈕則進(jìn)入用戶登錄界面,點(diǎn)擊清空可以將填寫(xiě)信息清空恢復(fù)到初始狀態(tài)。</p><p>
67、 ChatRoom.java是本系統(tǒng)的用戶聊天程序,主要提供用戶即時(shí)聊天的功能。用戶可以清除之前的聊天內(nèi)容、可以更改字體顏色字號(hào)、也可以將聊天記錄保存到記事本中。</p><p><b> 4.2主要引入的包</b></p><p> 1. import javax.swing.*</p><p> 提供一組“輕量級(jí)”(全部是Java語(yǔ)
68、言)組件,盡量讓這些組件在所有平臺(tái)上的工作方式都相同。</p><p> 2. import java.awt.*;</p><p> 包含Java語(yǔ)言用來(lái)構(gòu)建圖形用戶界面(GUI)的類庫(kù),包括許多界面元素和資源。Java.awt包提供Java語(yǔ)言中的圖形類、組成類、容器類、排列類、幾何類、事件類、和工具類等。</p><p> 3.import java.a
69、wt.event.*;</p><p> Java.awt.event包是對(duì)JDK1.0版本中原有的Event類的一個(gè)擴(kuò)充,它使得程序可以用不同的方式來(lái)處理不同類型的事件。該包中定義了許多不同類型的事件監(jiān)聽(tīng)器類,使每個(gè)圖形界面元素本身可以處理它上面的事件。</p><p> 4.import java.net.*;</p><p> 提供用于網(wǎng)絡(luò)應(yīng)用程序的類。
70、這些類包括用于創(chuàng)建套接字的工廠。使用套接字工廠可以封裝套接字的創(chuàng)建和配置行為。</p><p> 5.import java.io.*;</p><p> 通過(guò)數(shù)據(jù)流、序列化和文件系統(tǒng)提供系統(tǒng)輸入和輸出。 除非另有說(shuō)明,否則向此包的任何類或接口中的構(gòu)造方法或方法傳遞 null 參數(shù)時(shí),都將拋出 NullPointerException。 </p><p> 6
71、. import java.util.*;</p><p> 包含collection框架、遺留的collection類、事件模型、日期和時(shí)間設(shè)施、國(guó)際化和各種實(shí)用工具類(字符串標(biāo)記生成器、隨機(jī)數(shù)生成器和位數(shù)組)。</p><p><b> 4.3主要代碼</b></p><p> 聊天室ChatRoom.java中主要方法</p&
72、gt;<p> // /////////監(jiān)聽(tīng)按鈕響應(yīng)//////////////</p><p> public void actionPerformed(ActionEvent ae) {</p><p> Object source = (Object) ae.getSource();</p><p> if (source.equals(
73、btnTimer)) {</p><p> new Clock();</p><p><b> }</b></p><p> if (source.equals(btnCls)) {</p><p> clearMessage();</p><p><b> }</b&g
74、t;</p><p> if (source.equals(btnExit)) {</p><p><b> exit();</b></p><p><b> }</b></p><p> if (source.equals(btnSend)) {</p><p>
75、 sendMessage();</p><p><b> }</b></p><p> if (source.equals(btnSave)) {</p><p> saveMessage();</p><p><b> }</b></p><p> if (sou
76、rce.equals(lstUserList)) // 雙擊列表框</p><p><b> {</b></p><p> changeUser();</p><p><b> }</b></p><p><b> } </b></p><p>
77、 // /////////監(jiān)聽(tīng)窗口關(guān)閉響應(yīng)//////////////</p><p> class Windowclose extends WindowAdapter {</p><p> public void windowClosing(WindowEvent e) {</p><p><b> exit();</b></p
78、><p><b> }</b></p><p><b> }</b></p><p><b> // "清屏"按鈕</b></p><p> public void clearMessage() {</p><p> taUse
79、rMessage.setText("");</p><p><b> }</b></p><p><b> // "退出"按鈕</b></p><p> public void exit() {</p><p> Exit exit = new Exi
80、t();</p><p> exit.exitname = strLoginName;</p><p><b> // 發(fā)送退出信息</b></p><p><b> try {</b></p><p> Socket toServer = new Socket(strServerIp, 1
81、001);</p><p> // 向服務(wù)器發(fā)送信息</p><p> ObjectOutputStream outObj = new ObjectOutputStream(toServer</p><p> .getOutputStream());</p><p> outObj.writeObject(exit);</p&g
82、t;<p> outObj.close();</p><p> toServer.close();</p><p> frmChat.dispose();</p><p> // this.destroy();</p><p> } catch (Exception e) {</p><p>&
83、lt;b> }</b></p><p> } // exit()結(jié)束</p><p><b> // "發(fā)送"按鈕</b></p><p> public void sendMessage() {</p><p> Chat chatobj = new Chat();<
84、;/p><p> chatobj.chatUser = strLoginName;</p><p> chatobj.chatMessage = txtMessage.getText();</p><p> chatobj.chatToUser = String.valueOf(cmbUser.getSelectedItem());</p><
85、p> chatobj.whisper = chPrivateChat.isSelected() ? true : false;</p><p> chatobj.emote = emote.getSelectedItem().toString();</p><p> // 向服務(wù)器發(fā)送信息</p><p><b> try {</b&g
86、t;</p><p> Socket toServer = new Socket(strServerIp, 1001);</p><p> ObjectOutputStream outObj = new ObjectOutputStream(toServer</p><p> .getOutputStream());</p><p>
87、 outObj.writeObject(chatobj);</p><p> txtMessage.setText(""); // 清空文本框</p><p> outObj.close();</p><p> toServer.close();</p><p> } catch (Exception e) {&l
88、t;/p><p><b> }</b></p><p> } // sendMessage()結(jié)束</p><p><b> // "保存"按鈕</b></p><p> public void saveMessage() {</p><p><
89、b> try {</b></p><p> FileOutputStream fileoutput = new FileOutputStream(</p><p> this.strLoginName + "_message.txt", true);</p><p> String temp = taUserMessag
90、e.getText();</p><p> fileoutput.write(temp.getBytes());</p><p> fileoutput.close();</p><p> JOptionPane.showMessageDialog(null, "聊天記錄保存在" + this.strLoginName</p>
91、<p> + "_message.txt");</p><p> } catch (Exception e) {</p><p> System.out.println(e);</p><p><b> }</b></p><p><b> }</b><
92、;/p><p> // 將所選用戶添加到cmbUser中</p><p> public void changeUser() {</p><p> boolean key = true;</p><p> String selected = lstUserList.getSelectedItem();</p><p&g
93、t; for (int i = 0; i < cmbUser.getItemCount(); i++) {</p><p> if (selected.equals(cmbUser.getItemAt(i))) {</p><p> key = false;</p><p><b> break;</b></p>&
94、lt;p><b> }</b></p><p><b> }</b></p><p> if (key == true) {</p><p> cmbUser.insertItemAt(selected, 0);</p><p><b> }</b></p
95、><p> String head = getUserHead(lstUserList.getSelectedItem());</p><p> // JOptionPane.showMessageDialog(null, head);</p><p> cmbUser.setSelectedItem(selected);</p><p>
96、 headLabel.setIcon(new ImageIcon("face//" + head + ".JPG"));</p><p> } // changeUser()結(jié)束</p><p> protected void freshHead() {</p><p> // TODO 自動(dòng)生成方法存根</p&
97、gt;<p> String head = getUserHead(cmbUser.getSelectedItem().toString());</p><p> // JOptionPane.showMessageDialog(null, head);</p><p> // cmbUser.setSelectedItem(selected);</p>
98、<p> headLabel.setIcon(new ImageIcon("face//" + head + ".JPG"));</p><p><b> }</b></p><p> private String getUserHead(String selectedItem) {</p><
99、;p> // TODO 自動(dòng)生成方法存根</p><p> String head = "oo";</p><p> for (int i = 0; i < messobj.userOnLine.size(); i++) {</p><p> String User = ((Customer) messobj.userOnLi
100、ne.elementAt(i)).custName;</p><p> head = ((Customer) messobj.userOnLine.elementAt(i)).custHead;</p><p> if (User.equals(selectedItem)) {</p><p><b> break;</b></p&
101、gt;<p><b> }</b></p><p><b> }</b></p><p> return head;</p><p><b> }</b></p><p> public static void main(String args[]) {
102、</p><p> new ChatRoom("測(cè)試用戶", "127.0.0.1");</p><p><b> }</b></p><p><b> }</b></p><p><b> 4.4界面設(shè)計(jì)</b></p&g
103、t;<p><b> 4.4.1登錄界面</b></p><p> 用戶進(jìn)入登錄頁(yè)面后首先輸入正確的用戶名密碼然后點(diǎn)擊登錄就可進(jìn)入登錄界面,若第一次登錄請(qǐng)先注冊(cè)。單擊注冊(cè)按鈕,則用戶進(jìn)入注冊(cè)界面,填入相應(yīng)的信息以注冊(cè)。點(diǎn)擊退出按鈕則直接退出聊天系統(tǒng)。</p><p> 圖4.1用戶登錄界面</p><p><b>
104、 4.4.2注冊(cè)界面</b></p><p> 未注冊(cè)用戶可以通過(guò)輸入合法的用戶名、密碼、確認(rèn)密碼、郵箱、性別、年齡等信息后點(diǎn)擊確定按鈕。若注冊(cè)成功,則可以點(diǎn)擊返回按鈕,進(jìn)入登錄界面進(jìn)行登錄。若注冊(cè)失敗則會(huì)有提示信息,根據(jù)提示信息進(jìn)行信息的更改。如果信息填寫(xiě)錯(cuò)誤想直接清除所有已填寫(xiě)信息直接點(diǎn)擊清空按鈕。</p><p> 圖4.2用戶注冊(cè)界面</p><
105、;p><b> 4.4.3聊天界面</b></p><p> 用戶登錄到聊天系統(tǒng)后,進(jìn)入聊天界面可以進(jìn)行群聊也可以進(jìn)行私聊,默認(rèn)情況下,用戶輸入的聊天信息會(huì)發(fā)送到聊天室里的每一個(gè)人,只有用戶選擇了聊天對(duì)象,并且選擇了【私聊】復(fù)選框,就可以向指定的用戶發(fā)送聊天信息進(jìn)行私人聊天,這種情況下發(fā)送的聊天信息除了指定用戶外,其他用戶看不到該信息。</p><p>
106、用戶可以在聊天過(guò)程中點(diǎn)擊【保存】按鈕,可以將當(dāng)前的聊天記錄保存到文件中。</p><p> 用戶可以在聊天過(guò)程中點(diǎn)擊【清屏】按鈕,可以將當(dāng)前顯示在屏幕上的聊天信息清除。</p><p> 用戶可以在聊天過(guò)程中點(diǎn)擊【時(shí)鐘】按鈕,聊天系統(tǒng)將以時(shí)鐘形式顯示當(dāng)前時(shí)間。</p><p> 除了以上功能外,用戶還可以更改聊天內(nèi)容的字體、字號(hào)、顏色等信息。</p>
107、;<p><b> 圖4.3聊天界面</b></p><p> 4.4.4 查看聊天記錄界面</p><p> 點(diǎn)擊【聊天記錄】按鈕,可以查看自己的聊天記錄,若聊天記錄為空,則彈出對(duì)話框顯示“對(duì)不起,您沒(méi)有保存任何記錄”。聊天記錄如圖4.4所示。</p><p> 圖4.4聊天記錄界面</p><p&g
108、t;<b> 4.4.5時(shí)鐘界面</b></p><p> 在聊天界面中點(diǎn)擊【時(shí)鐘】按鈕,則出現(xiàn)下圖的界面。</p><p><b> 圖4.5時(shí)鐘界面</b></p><p><b> 5. 總結(jié)</b></p><p> 本文討論了如何利用JAVA技術(shù)開(kāi)發(fā)一個(gè)聊天
109、系統(tǒng),基本滿足了結(jié)構(gòu)化,界面友好、安全性及穩(wěn)定性等特點(diǎn)。</p><p> 在當(dāng)今網(wǎng)絡(luò)通信飛速發(fā)達(dá),電腦密布的世界當(dāng)中,一個(gè)簡(jiǎn)單高效的聊天通信軟件是如此的具有實(shí)用性,它能方便的讓用戶相互快速的傳遞信息,溝通感情節(jié)省人力物力、經(jīng)濟(jì)又時(shí)效,所以我們應(yīng)當(dāng)重視對(duì)它的相關(guān)研究與開(kāi)發(fā)。</p><p> 在這次得畢業(yè)設(shè)計(jì)中,我應(yīng)用了JAVA開(kāi)發(fā)工具在Windows平臺(tái)上開(kāi)發(fā)了一個(gè)聊天系統(tǒng),在這一重
110、要的領(lǐng)域進(jìn)行了相關(guān)的實(shí)踐,不管是對(duì)做這個(gè)聊天軟件的設(shè)計(jì),還是資料查閱的能力,都起了相當(dāng)大的益處。所以,我決定認(rèn)真總結(jié)這次畢業(yè)設(shè)計(jì)的經(jīng)驗(yàn),以及學(xué)習(xí)到的知識(shí),來(lái)更加的充實(shí)自己的頭腦范圍和完善自己的知識(shí)結(jié)構(gòu)。</p><p> 系統(tǒng)著重為實(shí)現(xiàn)相互聊天的應(yīng)用部分。由于時(shí)間和自己的能力有限的原因,這個(gè)聊天系統(tǒng)的功能還不夠完善,最初打算加上資料上傳的功能可是最終沒(méi)能實(shí)現(xiàn)。不過(guò)在做這個(gè)畢業(yè)設(shè)計(jì)的過(guò)程中仍然學(xué)習(xí)到了很多東西。使
111、我對(duì)java的認(rèn)識(shí)了解更加的深入。雖然課程設(shè)計(jì)順利的完成了,但由于水平有限,還是有很多的欠缺跟不足之處,希望老師給予指正。</p><p> 課程設(shè)計(jì)的機(jī)會(huì)不是很多,由于所學(xué)的知識(shí)包含了太多的方面,所以實(shí)踐方面還是遠(yuǎn)遠(yuǎn)不夠。 雖然課程設(shè)計(jì)順利的完成了,但由于水平有限,還是有很多的欠缺跟不足之處,希望老師給予指正。</p><p><b> 參考文獻(xiàn)</b><
112、/p><p> 1、劉志成.Java程序設(shè)計(jì)案例教程.清華大學(xué)出版社.2008</p><p> 2、龐永慶,翟鵬.Java 完全自學(xué)寶典.清華大學(xué)出版社.2008</p><p> 3、印雯.Java 語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì).清華大學(xué)出版編著</p><p> 4、劉永華,于春花.Java 網(wǎng)絡(luò)編程.清華大學(xué)出版社.2008 </
113、p><p> 5、李樹(shù)青.Java 通用范例開(kāi)發(fā)金典.電子工業(yè)出版社.2009</p><p> 6、薛為民, 夏文紅, 解侖.Java 應(yīng)用教程 北京:北京交通大學(xué)出版社 2005</p><p> 7、孫一林,彭波.Java 網(wǎng)絡(luò)編程實(shí)例.清華大學(xué)出版社.2003(4)</p><p> 8、胡少峰、趙克、耿春霞.一種基于Java技術(shù)
114、的聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).</p><p> [J].電腦與信息技術(shù) 2002年第04期</p><p> 9、清宏計(jì)算機(jī)工作室.《JAVA編程技巧》. 機(jī)械工業(yè)出版社</p><p> 10、耿祥義,張躍平.《JAVA實(shí)用教程》. 清華大學(xué)出版社,2003</p><p><b> 致謝</b></p&
115、gt;<p> 在本次畢業(yè)設(shè)計(jì)過(guò)程中,馬建斌老師認(rèn)真負(fù)責(zé)的工作態(tài)度,一次次不厭其煩地幫我分析相關(guān)技術(shù),解決技術(shù)難題,并教給我正確的研究方法,研究思路,以及嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和深厚的理論水平都使我受益匪淺。無(wú)論在理論上還是在實(shí)踐中,多給予了我很大的幫助,使我得到很大的提高,這對(duì)于我以后的工作和學(xué)習(xí)都有很大的幫助,在此期間他給我的論文提出了大量有價(jià)值的建議,并從繁忙的工作中抽出時(shí)間給予指導(dǎo),在此向馬老師表示衷心的感謝。</
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java的聊天室—客戶端
- 基于java的uaw聊天室系統(tǒng) ——客戶端通訊-畢業(yè)論文
- 軟件工程畢業(yè)論文-基于java的網(wǎng)絡(luò)聊天室的設(shè)計(jì)與實(shí)現(xiàn)--服務(wù)器端
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于java的聊天室設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文 java聊天室的設(shè)計(jì)
- java聊天室畢業(yè)論文
- 聊天室(java)-畢業(yè)論文
- 軟件工程畢業(yè)論文-局域網(wǎng)下的java聊天軟件的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java聊天室設(shè)計(jì)與實(shí)現(xiàn)
- java聊天室的設(shè)計(jì)與實(shí)現(xiàn)
- 基于java聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)——課程論文
- 軟件工程畢業(yè)論文-基于ios平臺(tái)的客戶端應(yīng)用之食安檢的設(shè)計(jì)與實(shí)現(xiàn)
- java聊天室系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- Java聊天室的設(shè)計(jì)與實(shí)現(xiàn).doc
- 基于java網(wǎng)頁(yè)版聊天室的設(shè)計(jì)與實(shí)現(xiàn)
- 軟件工程課程設(shè)計(jì)--- 文本聊天室
- 基于web的聊天室畢業(yè)論文
- 基于web的聊天室畢業(yè)論文
- 軟件工程畢業(yè)論文-美味食譜手機(jī)應(yīng)用客戶端開(kāi)發(fā)
評(píng)論
0/150
提交評(píng)論