版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-31-摘要在網(wǎng)絡(luò)越來(lái)越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴越來(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編寫一個(gè)運(yùn)行在android2.2版本以上的即時(shí)通訊軟件。
一般來(lái)說(shuō),聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫(kù)組成,本系統(tǒng)采用客戶端/服務(wù)器架構(gòu)模式通過(guò)Java提供的Socket類來(lái)連接客戶機(jī)和服務(wù)器并使客戶端和服務(wù)器之間相互通信,由于聊天是多點(diǎn)對(duì)多點(diǎn)的,Java提供的多線程功能用多線程可完成多點(diǎn)對(duì)多點(diǎn)的聊天,數(shù)據(jù)庫(kù)管理系統(tǒng)用MYSQL完成并通過(guò)ADO.Net訪問(wèn)數(shù)據(jù)庫(kù)。本系統(tǒng)建立在JAVA平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計(jì)原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過(guò)Socket傳送消息。使用JAVA語(yǔ)言編寫,開(kāi)發(fā)工具采用Eclipse。服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,采用了多線程技術(shù),可以在單個(gè)程序當(dāng)中同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。即時(shí)通訊系統(tǒng)完成后將可進(jìn)行多人對(duì)多人的聊天,對(duì)好友進(jìn)行查找和添加,對(duì)新用戶的注冊(cè),發(fā)送消息、接受消息等等功能。關(guān)鍵字:多線程;客戶機(jī)/服務(wù)器;JAVA;Socket;Eclipse;TCP/IPAbstractasthenetworkbecomemoreandmoredeveloped,peoplebecomemoreandmoreleantothenetwork,andcannotleavewithoutit.Thiscausedthechatmaterialsbecomemorenumerous,astheoverseasICQsystem,theOICQsystemthatinventedbyTencentCo.,andsoon.SowecreateanetworkchatmediumjustliketheQQ.Javanetworkprogrammingbasedonthepower,theuseofJavadesignedtopreparegraduatesachatsystem.Ingeneral,themajorityofthechattoolforclientandserverprograminadditiontoserver-sidestorageofcustomerdataforthedatabase,thesystemusesaclient/serverarchitecturemodeltheadoptionofJavaprovidedSocketclassconnectclientandserverandbetweentheclientandservercommunicatewitheachother,asthechatistoprovidepoint-to-multipointandmulti-threadedJavafunctiontobecompletedbyusingmulti-threadedchatandmorepoint-to-multipoint,databasemanagementsystemwithMYSQLthecompletionandadoptionofJDBC-ODBCBridgeaccessthedatabase.ThesystembuiltontheJAVAplatform,thesystemdesignusingobject-orientedtechnologyandobject-orienteddesignprinciples.SystemusestheC/Sstructure,clientandclient-sideandserver-sideclientandsendmessagesthroughSocket.TheuseofJAVAlanguage,developmenttoolsusingEclipse.DesignandImplementationofserver-sideprocess,theuseofmulti-threadingtechnology,whichcanprocessinasinglerunatthesametimeanumberofdifferentthreads,theimplementationofdifferenttasks.Proceduresgreatlyenhancedtheuseofserverresources.Chatsystemwillallowpeopletocompletechattomorefriends,andthesystemcansearchandadd,candealwithnewuserregistration,sendmessages,receivemessagesandsoon.
Keywords:Multithreading;Client/Server;JAVA;Socket;Eclipse;TCP/IP目錄1緒論 11.1國(guó)內(nèi)外聊天系統(tǒng)的研究現(xiàn)狀 11.2Java語(yǔ)言 21.2.1Java的發(fā)展歷史 21.2.2Java的特點(diǎn) 31.2.3Java與Internet 41.3Socket編程 41.3.1關(guān)于TCP/IP協(xié)議 41.3.2服務(wù)器和客戶機(jī) 51.4本文內(nèi)容安排 62需求分析 72.1可行性研究 72.1.1可行性分析 72.1.2系統(tǒng)功能需求 72.1.3系統(tǒng)性能需求 82.1.4系統(tǒng)運(yùn)行需求 82.2數(shù)據(jù)流圖 82.2.1頂層數(shù)據(jù)流圖 82.2.2一層數(shù)據(jù)流圖 92.2.3二層數(shù)據(jù)流圖 93概要設(shè)計(jì) 113.1系統(tǒng)實(shí)現(xiàn)原理 113.2系統(tǒng)實(shí)現(xiàn)層次圖: 123.3各模塊詳細(xì)功能 123.3.2服務(wù)器端結(jié)構(gòu) 123.3.2客戶端結(jié)構(gòu) 144詳細(xì)設(shè)計(jì) 194.1系統(tǒng)流程圖 194.1.1系統(tǒng)總體流程圖 194.1.2系統(tǒng)客戶端流程圖 204.2編寫服務(wù)器端程序 204.2.1問(wèn)題陳述 204.2.2解決方案 214.3客戶端程序編寫 284.3.3聊天室 38參考文獻(xiàn) 46致謝 451緒論1.1國(guó)內(nèi)外即時(shí)通訊系統(tǒng)的研究現(xiàn)狀目前國(guó)內(nèi)外做即時(shí)通訊軟件的公司很多,產(chǎn)品也琳瑯滿目,國(guó)內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國(guó)外有著名的MSN(新版改名為L(zhǎng)iveMessenger)以及跨平臺(tái)Gaim等。本人取最具代表性的QQ和MSN進(jìn)行了一些研究,作為我開(kāi)發(fā)即時(shí)通訊的準(zhǔn)備。騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通訊市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場(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)通信。其模型如圖1-1圖1-1騰訊QQ服務(wù)器-客戶端模型1與騰訊QQ不同,微軟的MSNMessenger只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進(jìn)行連接,然后通過(guò)與服務(wù)器的TCP連接進(jìn)行中轉(zhuǎn)通信。其模型如圖1-2圖1-2MSN服務(wù)器-客戶端模型2騰訊使用的模型中,服務(wù)器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務(wù)器的處理壓力,但其內(nèi)部協(xié)議和實(shí)現(xiàn)復(fù)雜度都較高。而MSNMessenger所有數(shù)據(jù)都要經(jīng)過(guò)服務(wù)器,所以服務(wù)器方的數(shù)據(jù)量會(huì)大一些(這也是平時(shí)很少見(jiàn)到使用MSN進(jìn)行語(yǔ)音視頻聊天的)。綜合騰訊QQ和微軟MSNMessenger的特點(diǎn)和我所學(xué)專業(yè)技術(shù)范疇,我打算在我的系統(tǒng)中嘗試建立MSN的服務(wù)器-客戶端模型,但以單服務(wù)器提供服務(wù)。1.2Java語(yǔ)言1.2.1Java的發(fā)展歷史Java的發(fā)展歷史,可以追朔到1990年。當(dāng)時(shí)SunMicrosystem公司為了發(fā)展消費(fèi)類電子產(chǎn)品進(jìn)行了一個(gè)名為Green的項(xiàng)目計(jì)劃。這個(gè)計(jì)劃的負(fù)責(zé)任是JamesGosling。起初他用具有面向?qū)ο筇卣鞯腃++語(yǔ)言編寫嵌入式軟件,可以放在面包機(jī)或PDA(PersonalDigitalAssistant,個(gè)人數(shù)字主力)等小型電子消費(fèi)這杯里,以使設(shè)備變得更為“聰明”,更具備人工只能。但后來(lái)發(fā)現(xiàn)C++并不適合這類任務(wù);因?yàn)镃++常會(huì)使系統(tǒng)失效。尤其在內(nèi)存管理方面,c++采用直接地址訪問(wèn)方式。需要程序員記錄并管理內(nèi)存資源。這造成程序員編程的極大負(fù)擔(dān),并可能產(chǎn)生多個(gè)Bugs。面包機(jī)上的程序錯(cuò)誤可能使面包機(jī)燒壞甚至爆炸。為了解決此類問(wèn)題,Gosling決定開(kāi)發(fā)一種新的語(yǔ)言,并取名為Oak。它采用了大部分與C++類似的語(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ā)成本。1.2.2Java的特點(diǎn)Java是一種簡(jiǎn)單、安全、容易適用、面向?qū)ο?、可移置、高性能、多線程的語(yǔ)言。簡(jiǎn)單性Java語(yǔ)言簡(jiǎn)單高校,基本Java系統(tǒng)(編譯器和解釋器)所占空間不足250KB由于Java最初是為了對(duì)家用電器進(jìn)行集成控制而設(shè)計(jì)的,因而具備簡(jiǎn)單命了的特征。面向?qū)ο竺嫦驅(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ǔ)言。安全性Java是可以用在網(wǎng)路及分布環(huán)境下的網(wǎng)路程序設(shè)計(jì)語(yǔ)言。在網(wǎng)路環(huán)境下,語(yǔ)言的安全性變得更為重要。Java提供了許多安全機(jī)制來(lái)保證其適用上的安全性。平臺(tái)獨(dú)立平臺(tái)獨(dú)立指程序不受操作平臺(tái)的限制,可以應(yīng)用在各種平臺(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ú)立性。多線程Java具備內(nèi)建的多線程功能,可以將一個(gè)程序的不同程序段設(shè)置為不同的線程,使各線程并發(fā)、獨(dú)立執(zhí)行,提高系統(tǒng)的運(yùn)行效率。6.網(wǎng)絡(luò)功能Java能從全球網(wǎng)絡(luò)資源獲取所需信息,如數(shù)據(jù)文件、影響文件、聲音文件等,并對(duì)所得信息進(jìn)行處理,所以說(shuō)Java是一種網(wǎng)絡(luò)語(yǔ)言。7.執(zhí)行效率Java的字節(jié)碼需要經(jīng)過(guò)Java虛擬機(jī)JVM解釋成機(jī)器碼才能執(zhí)行,所以速度上較慢。但是隨著JVM技術(shù)的進(jìn)步,使得其執(zhí)行速度直逼C與C++。1.2.3Java與InternetJava語(yǔ)言取得成功的領(lǐng)域之一就是網(wǎng)絡(luò)(其他語(yǔ)言)數(shù)頁(yè)代碼>(Java)一條語(yǔ)句。TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是internet的主要協(xié)議,定義了計(jì)算機(jī)和外設(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地址.在Java中,有一個(gè)用來(lái)存儲(chǔ)internet地址的類叫InterAddress.Java提供的網(wǎng)絡(luò)功能有三大類:URL,Socket,Datagram.1、URL是三大功能中最高級(jí)的一種,通過(guò)URLJava程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù).2、Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個(gè)不同的程序通過(guò)網(wǎng)絡(luò)的通信信道.3、Datagram是更低級(jí)的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上1.3Socket編程1.3.1關(guān)于TCP/IP協(xié)議TCP協(xié)議是網(wǎng)絡(luò)通信的基石,對(duì)此,Java專門提供了Socket的類庫(kù),在其中抽象出TCP協(xié)議通信的常用方法:TCP協(xié)議與三次握手:在講述TCP協(xié)議流程前,先來(lái)聲明兩個(gè)重要的概念:(1)客戶端,首先發(fā)送TCP請(qǐng)求的是客戶端,客戶端一般是服務(wù)(比如數(shù)據(jù)查詢服務(wù))的請(qǐng)求者。(2)服務(wù)器,在接收到客戶端的請(qǐng)求后(確保同客戶端的通信信道建立)服務(wù)器會(huì)向客戶端提供服務(wù)。服務(wù)器一般是服務(wù)的執(zhí)行者,會(huì)向客戶端返回服務(wù)執(zhí)行的結(jié)果。為了實(shí)現(xiàn)客戶端同服務(wù)器端的通信,客戶端首先發(fā)送一個(gè)“SYN”數(shù)據(jù)包。如果服務(wù)器收到SYN標(biāo)記,它將發(fā)回一個(gè)“SYN+ACK”數(shù)據(jù)包。接著,客戶端為了表示收到了這個(gè)SYN+ACK信息,會(huì)向服務(wù)器發(fā)送一個(gè)最終確認(rèn)信息(ACK包)。這種SYN,SYN+ACK,ACK的步驟被稱為TCP連接建立時(shí)的“三次握手”,在這之后,連接就建立起來(lái)了,這個(gè)連接將一直保持活動(dòng)狀態(tài),直到超時(shí)或者任何一方發(fā)出一個(gè)FIN(結(jié)束)信號(hào)。這種通信模式也叫客戶端/服務(wù)器(C/S)模式。ACK=1ACK=1第一次握手,主機(jī)A向主機(jī)B發(fā)送連接請(qǐng)求第二次握手,主機(jī)B收到主機(jī)A的請(qǐng)求,向主機(jī)A回發(fā)一個(gè)確認(rèn),,同時(shí)向主機(jī)A發(fā)送一個(gè)連接請(qǐng)求第三次握手,主機(jī)A收到主機(jī)B發(fā)送的數(shù)據(jù)包在向主機(jī)B發(fā)送一個(gè)確認(rèn)連接主機(jī)A主機(jī)BSYN=1,SEQ=SYN=1,SEQ=ACK=1,SYN=1,SEQ=ACK=1,SYN=1,SEQ=aaaaaaaaaa圖1-3三次握手協(xié)議由此可見(jiàn),通過(guò)客戶端和服務(wù)器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。1.3.2服務(wù)器和客戶機(jī)網(wǎng)絡(luò)最基本的目的就是讓兩臺(tái)機(jī)器連接到一起,并相互“交談”或者“溝通”。一旦兩臺(tái)機(jī)器都發(fā)現(xiàn)了對(duì)方,就可以展開(kāi)一次令人愉快的雙向?qū)υ?。但它們?cè)鯓硬拍堋鞍l(fā)現(xiàn)”對(duì)方呢?這就像在游樂(lè)園里那樣:一臺(tái)機(jī)器不得不停留在一個(gè)地方,偵聽(tīng)其他機(jī)器說(shuō):“嘿,你在哪里呢?”
“停留在一個(gè)地方”的機(jī)器叫做“服務(wù)器”(Server);到處“找人”的機(jī)器則叫做“客戶機(jī)”(Client)或者“客戶”。它們之間的區(qū)別只有在客戶機(jī)試圖同服務(wù)器連接的時(shí)候才顯得非常明顯。一旦連通,就變成了一種雙向通信,誰(shuí)來(lái)扮演服務(wù)器或者客戶機(jī)便顯得不那么重要了。
所以服務(wù)器的主要任務(wù)是偵聽(tīng)建立連接的請(qǐng)求,這是由我們創(chuàng)建的特定服務(wù)器對(duì)象完成的。而客戶機(jī)的任務(wù)是試著與一臺(tái)服務(wù)器建立連接,這是由我們創(chuàng)建的特定客戶機(jī)對(duì)象完成的。一旦連接建好,那么無(wú)論在服務(wù)器端還是客戶機(jī)端,連接只是魔術(shù)般地變成了一個(gè)IO數(shù)據(jù)流對(duì)象。從這時(shí)開(kāi)始,我們可以象讀寫一個(gè)普通的文件那樣對(duì)待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是Java聯(lián)網(wǎng)最方便的一個(gè)地方。圖1-4服務(wù)器和客戶機(jī)的連接1.4本文內(nèi)容安排本論文內(nèi)容安排如下:第二章為聊天系統(tǒng)的需求分析,主要介紹系統(tǒng)的可行性研究,需求分析流程圖等。第三章為概要設(shè)計(jì),分模塊介紹系統(tǒng)的具體實(shí)現(xiàn)過(guò)程。第四章為詳細(xì)設(shè)計(jì)。2需求分析2.1.1可行性分析經(jīng)濟(jì)可行性:由于本系統(tǒng)的主要背景是畢業(yè)課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)能運(yùn)行Java軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。技術(shù)可行性:本系統(tǒng)的開(kāi)發(fā)利用MicrosoftSQLServer2005作為本系統(tǒng)的數(shù)據(jù)庫(kù),它是一個(gè)支持多用戶的新型數(shù)據(jù)庫(kù),適用于大中規(guī)模的數(shù)據(jù)量需求。學(xué)校校園網(wǎng)的建設(shè)也為新系統(tǒng)服務(wù)器/客戶端的結(jié)構(gòu)提供了硬件的支持。使用Java作為系統(tǒng)開(kāi)發(fā)的開(kāi)發(fā)環(huán)境,它提供完善的指令控制語(yǔ)句、類與對(duì)象的支持及豐富的數(shù)據(jù)類型,給開(kāi)發(fā)高性能系統(tǒng)提供的保障為開(kāi)發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對(duì)新系統(tǒng)的擴(kuò)展與修改。運(yùn)行可行性:本系統(tǒng)為一個(gè)小型的即時(shí)聊天系統(tǒng),所耗費(fèi)的資源非常的小,現(xiàn)在一般的電腦無(wú)論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。綜上所述,本系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。2.1.2系統(tǒng)功能需求本系統(tǒng)主要通過(guò)客戶端,服務(wù)器端來(lái)體現(xiàn)即時(shí)通訊的基本功能。(1)服務(wù)器端 1.處理用戶注冊(cè) 2.處理用戶登錄 3.處理用戶發(fā)送信息 4.處理用戶得到信息 5.處理用戶增刪改請(qǐng)求 6.處理用戶退出(2)客戶端1.用戶注冊(cè)界面及結(jié)果 2.用戶登錄界面及結(jié)果 3.用戶發(fā)送信息界面及結(jié)果 4.用戶得到信息界面及結(jié)果 5.用戶請(qǐng)求增刪改及結(jié)果 6.用戶退出界面及結(jié)果2.1.3系統(tǒng)性能需求實(shí)用性:為信息交流提供方便,有效進(jìn)行作業(yè)管理。操作簡(jiǎn)單:本系統(tǒng)應(yīng)該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時(shí)系統(tǒng)不應(yīng)太復(fù)雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡(jiǎn)單易行。技術(shù)先進(jìn):產(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)先地位。安裝使用簡(jiǎn)便:服務(wù)器端的安裝簡(jiǎn)潔明了,客戶機(jī)無(wú)需再裝任何軟件就可以直接注冊(cè)登陸聊天。適應(yīng)性:應(yīng)該能廣泛應(yīng)用于不同類型的企事業(yè)單位。系統(tǒng)采用模塊化設(shè)計(jì),用戶可以根據(jù)自己的實(shí)際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應(yīng)用。代碼可讀性好:文中的代碼將盡可能簡(jiǎn)潔,易懂。2.1.4系統(tǒng)運(yùn)行需求移動(dòng)客戶端需500MHz及以上的處理器移動(dòng)客戶端需256MB及以上的ROM空間移動(dòng)客戶端需256MB及以上的RAM空間移動(dòng)客戶端需具有WiFi/GRPS網(wǎng)絡(luò)接收模塊,能正常連接到網(wǎng)絡(luò)服務(wù)端需具有P41.6GHz及以上的處理器服務(wù)端需具有80GB及以上的硬板空間服務(wù)端需具有1GB及以上的內(nèi)存空間2.2數(shù)據(jù)流圖聊天用戶服務(wù)器聊天用戶2.2.1頂層數(shù)據(jù)流圖聊天用戶服務(wù)器聊天用戶圖2-1頂層數(shù)據(jù)流圖2.2.2一層數(shù)據(jù)流圖聊天用戶聊天用戶客戶端服務(wù)器端數(shù)據(jù)流聊天用戶.2.2.3二層數(shù)據(jù)流圖用戶登錄用戶登錄用戶注冊(cè)用戶客戶端服務(wù)器端處理用戶退出用戶請(qǐng)求信息用戶聊天信息圖2-3系統(tǒng)二層數(shù)據(jù)流圖3概要設(shè)計(jì)3.1系統(tǒng)實(shí)現(xiàn)原理即時(shí)通訊的設(shè)計(jì)跟普通網(wǎng)站設(shè)計(jì)有著許多不同的地方,普通網(wǎng)站設(shè)計(jì)所考慮的因素,例如,普通網(wǎng)站需要對(duì)布局進(jìn)入大量美化以及動(dòng)畫設(shè)計(jì)等等,而即時(shí)通訊只要提供滿足訪客雙方直接實(shí)時(shí)聊天即可。因此,在設(shè)計(jì)聊天系統(tǒng)的過(guò)程中,必須要考慮好以下幾個(gè)設(shè)計(jì)要點(diǎn):在Internet上的聊天程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序登錄到服務(wù)器,就可以與登錄在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。圖3-1系統(tǒng)實(shí)現(xiàn)原理圖3.2系統(tǒng)實(shí)現(xiàn)層次圖:Socket連接Socket連接客戶端服務(wù)器端實(shí)時(shí)聊天好友信息請(qǐng)求更新信息請(qǐng)求好友添加/刪除注冊(cè)/登錄請(qǐng)求聊天消息轉(zhuǎn)發(fā)好友信息查詢用戶信息更新好友添加/刪除用戶注冊(cè)/登錄3.3各模塊詳細(xì)功能3.3.1服務(wù)器端結(jié)構(gòu)服務(wù)器監(jiān)聽(tīng)控制窗體服務(wù)器監(jiān)聽(tīng)控制窗體Server啟動(dòng)服務(wù)器監(jiān)聽(tīng)AppServer處理所有用戶請(qǐng)求Connection圖3-3服務(wù)器端結(jié)構(gòu)圖Server.java:服務(wù)器啟動(dòng)監(jiān)聽(tīng)操作。 DBUtil.java:服務(wù)器端連接數(shù)據(jù)庫(kù),負(fù)責(zé)服務(wù)器端與數(shù)據(jù)庫(kù)連接讀取數(shù)據(jù)操作。InputThread.java:服務(wù)器端監(jiān)聽(tīng)接收客戶端發(fā)來(lái)信息,處理各種請(qǐng)求。OutputThread.java:服務(wù)器端向客戶端發(fā)送消息。TranObject.java:服務(wù)器端與客戶端消息交換的對(duì)象類型。TranObjectType.java:服務(wù)器接受客戶端發(fā)來(lái)消息的所有類型。UserDao.java:定義一個(gè)與所有用戶操作相關(guān)的接口。UserDaoImpl.java:UserDao的具體實(shí)現(xiàn)類。運(yùn)行客戶端Welcome用戶登陸Login用戶運(yùn)行客戶端Welcome用戶登陸Login用戶注冊(cè)Register用戶主窗體FriendList用戶監(jiān)聽(tīng)GetMsgService圖3-4客戶端結(jié)構(gòu)圖 GetMsgService.java:客戶端啟動(dòng)一個(gè)服務(wù)。WelcomeActivity.java:客戶端啟動(dòng)歡迎頁(yè)面。RegisterActivity.java:客戶端在線注冊(cè)界面。ChatActivity.java:客戶端聊天界面。AddFriendActivity.java:客戶端查找好友界面并提供添加好友功能。UserlistAdapter.java:客戶端好友信息數(shù)據(jù)。OwnInfodata.java:客戶端自己信息數(shù)據(jù)成員。RegisterInfo.java:客戶端注冊(cè)信息數(shù)據(jù)成員。UserInfodata.java:客戶端好友信息數(shù)據(jù)成員。Userdata.java:客戶端用戶信息數(shù)據(jù)。RegisterActivity.java:客戶端注冊(cè)界面及交互。LogonActivity.java:客戶端登錄界面及交互。ChartActivity.java:負(fù)責(zé)客戶端聊天窗體及交互。UserInfoActivity.java:客戶端好友信息界面及交互。OwnInfoActivity.java:客戶端自己信息界面及交互。FindUserActivity.java:負(fù)責(zé)客戶端好友查找界面及交互。UserListActivity.java:客戶端在線用戶界面與交互。SocketClient.java:客戶端連接服務(wù)器及與服務(wù)器進(jìn)行交互。GalleryTabactivity.java:客戶端主界面,負(fù)責(zé)各項(xiàng)窗體操作和數(shù)據(jù)分配及交互。4詳細(xì)設(shè)計(jì)4.1系統(tǒng)流程圖4.1.1系統(tǒng)總體流程圖開(kāi)始開(kāi)始啟動(dòng)服務(wù)器判斷啟動(dòng)信息啟動(dòng)客戶端判斷登錄信息登錄服務(wù)器退出服務(wù)器注冊(cè)用戶結(jié)束否是是圖4-1系統(tǒng)總體流程圖4.1.2系統(tǒng)客戶端流程圖開(kāi)始開(kāi)始客戶端登錄判斷主界面聊天界面好友信息界面?zhèn)€人信息界面退出結(jié)束 圖4-2客戶端流程圖4.2編寫服務(wù)器端程序4.2.1問(wèn)題陳述1.能過(guò)接收用戶注冊(cè)信息并保存。2.能夠允許注冊(cè)過(guò)的用戶登錄聊天界面。3.能夠與在線好友進(jìn)行自由聊天。4.服務(wù)器運(yùn)行在自定義的端口8080上。5.服務(wù)器監(jiān)控用戶列表和對(duì)用戶消息進(jìn)行轉(zhuǎn)發(fā)。6.服務(wù)器對(duì)用戶的請(qǐng)求作出處理。7.服務(wù)器對(duì)在線下線列表進(jìn)行更新。4.2.2解決方案后臺(tái)數(shù)據(jù)庫(kù)設(shè)計(jì)基于服務(wù)器跨平臺(tái)運(yùn)行的架構(gòu),服務(wù)器的后臺(tái)數(shù)據(jù)庫(kù)使用了SQLServer2005。(1)userInfo表:userInfo表此表主要包含了用戶帳戶基本信息。即時(shí)通訊系統(tǒng)采用賬戶、密碼的登錄方式,給每個(gè)用戶生成一個(gè)唯一ID來(lái)做系統(tǒng)內(nèi)部的用戶標(biāo)識(shí)。(2)friend表friend表此表主要包含了用戶好友ID關(guān)系信息。用戶注冊(cè)1.去數(shù)據(jù)庫(kù)讀數(shù)據(jù)首先創(chuàng)建一個(gè)字符串連接并寫入查詢命令,利用dataset保存臨時(shí)數(shù)據(jù),留作后面注冊(cè)時(shí)用。2.客戶端請(qǐng)求注冊(cè)客戶端通過(guò)RegisterActivity.java請(qǐng)求注冊(cè),填寫注冊(cè)信息,并驗(yàn)證各項(xiàng)信息格式是否符合規(guī)定,如果不符合規(guī)定格式,則進(jìn)行提示重新填寫,最后將請(qǐng)求信息發(fā)送給服務(wù)器端。下面是注冊(cè)驗(yàn)證賬戶代碼:3.服務(wù)器端響應(yīng)服務(wù)器端得到注冊(cè)請(qǐng)求會(huì)將對(duì)象輸入流轉(zhuǎn)化為文件輸出流,并反饋給客戶端??蛻舳说玫阶?cè)信息后會(huì)在前臺(tái)填寫注冊(cè)信息,然后創(chuàng)建文件輸出流,再用對(duì)象輸出流包裝后寫入本地文件將其持久化。最后關(guān)閉對(duì)象輸出流和文件輸入流。//將向量中的類寫回文件 FileOutputStreamfile=newFileOutputStream(fList); ObjectOutputStreamobjout=newObjectOutputStream(file); objout.writeObject(vList);4.給客戶端返回信息將用戶注冊(cè)成功或失敗的信息用打印流包裝Socket以后,輸出給客戶端注冊(cè)結(jié)果的詳細(xì)信息。 //發(fā)送注冊(cè)成功信息 toClient.println(clientMessage.custName+"注冊(cè)成功"); Datet=newDate(); log("用戶"+clientMessage.custName+"注冊(cè)成功,"+"注冊(cè)時(shí)間:" +t.toLocaleString()+"\n");5.關(guān)閉Socket連接當(dāng)以上的程序都正常運(yùn)行后,需要關(guān)閉Socket連接,否則將會(huì)浪費(fèi)服務(wù)器與客戶端之間的資源。用戶登陸1.去數(shù)據(jù)庫(kù)讀用戶數(shù)據(jù)打開(kāi)用戶數(shù)據(jù)庫(kù)文件“User.txt”,將用戶數(shù)據(jù)對(duì)象集載入內(nèi)存,以供下面的程序使用。//讀文件 FileInputStreamfile3=newFileInputStream("user.txt"); ObjectInputStreamobjInput1=newObjectInputStream(file3); vList=(Vector)objInput1.readObject();2.驗(yàn)證用戶名是否存在在對(duì)象數(shù)據(jù)庫(kù)中查找是否有與登錄用戶的用戶名相同的記錄,如果有繼續(xù)驗(yàn)證,否則退出驗(yàn)證處理,返回“沒(méi)有此用戶”錯(cuò)誤用戶登陸程序模塊如下:if(reg.custName.equals(clientMessage2.custName)){ find=1; if(!reg.custPassword.equals(clientMessage2.custPassword)){ toClient.println("密碼不正確"); break; }else{ //判斷是否已經(jīng)登錄 intlogin_flag=0; for(inta=0;a<userOnline.size();a++){ String_custName=((Customer)userOnline .elementAt(a)).custName; if(clientMessage2.custName.equals(_custName)){ login_flag=1; break; } } if(userOnline.size()>=50){ toClient.println("登錄人數(shù)過(guò)多,請(qǐng)稍候再試"); break; 用戶退出1.接收退出信息當(dāng)用戶退出時(shí),客戶端將會(huì)用基于Socket的對(duì)象輸出流發(fā)送給服務(wù)器退出對(duì)象。2.在線列表中刪除用戶用戶退出后應(yīng)該把用戶從在線列表中刪除,否則用戶退出用戶還在在線列表中,那么該用戶下次將會(huì)無(wú)法登錄。3.更新在線列表用戶退出后將服務(wù)器端監(jiān)控界面的用戶列表更新。否則用戶數(shù)據(jù)將會(huì)不同步。用戶退出模塊程序:publicvoidserverExit(){ Exitexit=newExit(); exit=(Exit)obj; removeUser(exit); //chenmin if(sFrame.ti.equals(exit.exitname)){ sFrame.ti=""; } Datet=newDate(); log("用戶"+exit.exitname+"已經(jīng)退出,"+"退出時(shí)間:"+t.toLocaleString()); freshServerUserList(); }接收用戶聊天信息1.接收用戶聊天信息當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用Socket傳輸過(guò)來(lái)的聊天信息對(duì)象,然后將其強(qiáng)制轉(zhuǎn)換為Chat對(duì)象。2.過(guò)濾用戶聊天內(nèi)容的非法信息分析聊天信息對(duì)象的聊天內(nèi)容,用語(yǔ)言過(guò)濾類將非法字符過(guò)濾掉。語(yǔ)言過(guò)濾的時(shí)候?qū)?huì)打開(kāi)“badword.txt”文件,不允許出現(xiàn)的關(guān)鍵詞將會(huì)存儲(chǔ)在文件中,關(guān)鍵字之間以逗號(hào)分割。當(dāng)聊天內(nèi)容中出現(xiàn)要過(guò)渡的關(guān)鍵字是將會(huì)被系統(tǒng)屏蔽,而聊天內(nèi)容3.接收服務(wù)器端的系統(tǒng)消息當(dāng)有其他用戶登陸時(shí),系統(tǒng)會(huì)給在線的所有用戶發(fā)送用戶登陸信息,并且通過(guò)服務(wù)器可以給各用戶發(fā)送系統(tǒng)消息。系統(tǒng)消息發(fā)出后,如再有登錄者也可以接收到系統(tǒng)消息。4.返回給客戶端當(dāng)以上信息都封裝成功后,打開(kāi)與客戶端連接的Socket的輸出流,然后再用ObjectOutputStream對(duì)象輸出流包裝后輸出給客戶端。publicvoidserverChat(){ //將接收到的對(duì)象值賦給聊天信息的序列化對(duì)象 ChatcObj=newChat(); cObj=(Chat)obj; //chenmin cObj.chatMessage=WordFilter.filter(cObj.chatMessage); chatLog(cObj); //將聊天信息的序列化對(duì)象填加到保存聊天信息的矢量中 userChat.addElement((Chat)cObj); return; }4.3客戶端程序編寫4.3.1程序?qū)⑼ㄟ^(guò)AddFriendActivity.java用戶注冊(cè)界面收集用戶的用戶名、密碼、電子郵箱。如上圖所示客戶端用戶注冊(cè)信息模塊程序(通過(guò)調(diào)用系統(tǒng)本省已經(jīng)定義好的向服務(wù)器發(fā)送信息的方法直接將頁(yè)面注冊(cè)的信息發(fā)送到服務(wù)器端):Clientclient=application.getClient();// Clientclient=GetMsgService.client; ClientOutputThreadout=client.getClientOutputThread(); TranObject<User>o=newTranObject<User>( TranObjectType.REGISTER); Useru=newUser(); u.setEmail(email); u.setName(name); u.setPassword(passwd);// u.setPassword(Encode.getEncode("MD5",passwd)); o.setObject(u); out.setMsg(o);4.3.2用戶登錄收集用戶登錄信息程序?qū)⑼ㄟ^(guò)LoginActivity.java用戶登錄界面收集用戶的用戶名、密碼,如圖圖4-15收集用戶登錄信息圖 Stringaccounts=mAccounts.getText().toString(); Stringpassword=mPassword.getText().toString(); if(accounts.length()==0||password.length()==0){ DialogFactory.ToastDialog(this,"QQ登錄","親!帳號(hào)或密碼不能為空哦"); }else{ showRequestDialog(); //通過(guò)Socket驗(yàn)證信息 if(application.isClientStart()){ Clientclient=application.getClient(); ClientOutputThreadout=client.getClientOutputThread(); TranObject<User>o=newTranObject<User>(TranObjectType.LOGIN); Useru=newUser(); u.setId(Integer.parseInt(accounts));// u.setPassword(Encode.getEncode("MD5",password)); u.setPassword(password); o.setObject(u); out.setMsg(o); }else{ if(mDialog.isShowing()) mDialog.dismiss(); DialogFactory.ToastDialog(LoginActivity.this,"QQ登錄", "親!服務(wù)器暫未開(kāi)放哦"); } }4.3.3聊天室當(dāng)用戶登錄成功后,用戶的登錄界面將會(huì)隱藏,然后創(chuàng)建用戶聊天室窗口,在界面的標(biāo)題欄將會(huì)顯示當(dāng)前登錄用戶的用戶名,以防止一個(gè)機(jī)器上的用戶開(kāi)多個(gè)賬號(hào)進(jìn)入聊天室后分不清哪個(gè)窗口是哪個(gè)用戶登錄的,界面第一行將顯示當(dāng)前在線人數(shù)。位于界面正中的兩個(gè)控件分別是List和TextBox用來(lái)顯示當(dāng)前服務(wù)器上的在線會(huì)員名單列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天內(nèi)容個(gè)性化配置控件。包括聊天對(duì)象,聊天語(yǔ)氣,聊天內(nèi)容,聊天字體,風(fēng)格,大小,顏色…….用戶發(fā)送信息用戶需要發(fā)送信息時(shí),在聊天內(nèi)容里寫下要發(fā)送的信息,然后點(diǎn)擊發(fā)送就可以發(fā)送到其他客戶端,也可以選擇私聊,聊天表情,聊天信息通過(guò)服務(wù)器發(fā)送到其他客戶端。如圖:當(dāng)多個(gè)用戶同時(shí)在線時(shí)可以對(duì)某個(gè)人私聊,可以查看到最近聊天用戶的列表:Useru=newUser(); u.setName(entity.getName()); u.setId(entity.getId()); u.setImg(entity.getImg()); Intentintent=newIntent(context,ChatActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("user",u); context.startActivity(intent); //Toast.makeText(Tab2.this,"開(kāi)始聊天",0).show(); application.setRecentNum(0);保存聊天記錄當(dāng)用戶需要保存聊天記錄時(shí)可以直接點(diǎn)擊“保存”按鈕,為了防止多用戶聊天記錄文件沖突問(wèn)題,聊天記錄將會(huì)以“用戶名_message.txt”為文件名,將信息保存在當(dāng)前應(yīng)用程序目錄下。如圖保持模塊程序://"保存"按鈕 publicvoidsaveMessage(){ try{ FileOutputStreamfileoutput=newFileOutputStream( this.strLoginName+"_message.txt",true); Stringtemp=taUserMessage.getText(); //System.out.println(temp); fileoutput.write(temp.getBytes()); fileoutput.close(); JOptionPane.showMessageDialog(null,"聊天記錄保存在"+this.strLoginName +"_message.txt"); }catch(Exceptione){ System.out.println(e); } }顯示系統(tǒng)時(shí)間當(dāng)用戶需要查看當(dāng)前時(shí)間時(shí),可以直接點(diǎn)擊“時(shí)鐘”按鈕,將會(huì)啟動(dòng)一個(gè)漂亮的電子時(shí)鐘,時(shí)鐘模塊程序:publicvoidactionPerformed(ActionEvente){timer.restart();}publicvoidpaint(Graphicsg){ Insetsinsets=getInsets(); intL0=(insets.left)/2,T0=(insets.top)/2; inthh,mm,ss; Stringst; h=getSize().height; //繪制圓形…………………… //獲取時(shí)間 Calendarnow=Calendar.getInstance(); hh=now.get(Calendar.HOUR_OF_DAY);//小時(shí) mm=now.get(Calendar.MINUTE);//分鐘 ss=now.get(Calendar.SECOND);//秒 g.setColor(Color.pink); g.fillRect(L0,T0,60,28);//填充的矩形 g.setColor(Color.blue); if(hh<10)st="0"+hh;elsest=""+hh; if(mm<10)st=st+":0"+mm;elsest=st+":"+mm; if(ss<10)st=st+":0"+ss;elsest=st+":"+ss; g.drawString(st,L0,T0+25); //計(jì)算時(shí)間和圖形的關(guān)系 sdo=90-ss*6; mdo=90-mm*6; hdo=90-hh*30-mm/2; //擦除秒針 …………… //繪制秒針 g.setColor(Color.yellow); x=(int)((r-8)*Math.cos(RAD*sdo)+x0); y=(int)((r-8)*Math.sin(RAD*sdo)+y0)-2*T0; g.drawLine(x0,y0,x,(h-y)); old_X=x; old_Y=y; //繪制分針 line(g,mdo,(int)(r*0.7),Color.green); //繪制時(shí)針 line(g,hdo,(int)(r*0.5),Color.red);}//endpaint圖4-22屏蔽聊天信息 FileReaderfileReader=newFileReader(files); BufferedReaderread=newBufferedReader(fileReader); while(true){ Stringline=read.readLine(); if(line==null){ break;} fileString+=(line); //fileString+=(line+"\n"); } read.close(); //System.out.println(fileString); }catch(FileNotFoundExceptione){ //TODO自動(dòng)生成catch塊 e.printStackTrace(); }catch(IOExceptione){ //TODO自動(dòng)生成catch塊 e.printStackTrace(); } returnfileString; }退出聊天系統(tǒng)當(dāng)前用戶點(diǎn)擊“退出”按鈕或者關(guān)閉窗口時(shí),系統(tǒng)將會(huì)把用戶退出的信息打包成對(duì)象發(fā)送給服務(wù)器,并退出客戶端程序。//"退出"按鈕 publicvoidexit(){ Exitexit=newExit(); exit.exitname=strLoginName; //發(fā)送退出信息 try{ SockettoServer=newSocket(strServerIp,1001); //向服務(wù)器發(fā)送信息 ObjectOutputStreamoutObj=newObjectOutputStream(toServer .getOutputStream()); outObj.writeObject(exit); outObj.close(); toServer.close(); frmChat.dispose(); //this.destroy(); }catch(Exceptione){ }privatevoidexitChatRoom(){ exit(); }出現(xiàn)異常信息在用戶聊天時(shí),當(dāng)服務(wù)器關(guān)閉或者與服務(wù)器無(wú)法連接時(shí),客戶端將會(huì)給出“不能連接到服務(wù)器!”的信息。并在用戶查看后退出客戶端。參考文獻(xiàn)[1]孟凡榮.?dāng)?shù)據(jù)庫(kù)原理與應(yīng)用.中國(guó)礦業(yè)大學(xué),2009(8)28-30[2]張虹.軟件工程與軟件開(kāi)發(fā)工具.清華大學(xué)出版社.2009(1)55-75[3]BruceEckel.ThinkinginJava.機(jī)械工業(yè)出版社.2009(6)42-64[4]羅軍舟等.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù).清華大學(xué)出版社.2008(10)[5]孫一林,彭波.Java網(wǎng)絡(luò)編程實(shí)例.清華大學(xué)出版社.2003(4)[6]李樹(shù)青.Java通用范例開(kāi)發(fā)金典.電子工業(yè)出版社.2009[7]王鵬.JavaSwing圖形界面開(kāi)發(fā)與案例詳解.清華大學(xué)出版社.2008[8]龐永慶,翟鵬.Java完全自學(xué)寶典.清華大學(xué)出版社.2008[9]劉永華,于春花.Java網(wǎng)絡(luò)編程.清華大學(xué)出版社.2008[10]BoostDocumentation,或[11]Boost.AsioDocumentation,[12]孫桂蘭.電子商務(wù)網(wǎng)上書店系統(tǒng).北京:人民郵電出版社,2004[13]JaloteP.Optimumcontrollimitsforemployingstatisticalprocesscontrolinsoftwareprocess.IEEETransonSoftwareEngineering,2002,28(12)[14]薩師煊,王珊.數(shù)據(jù)庫(kù)系統(tǒng)概述.第三版.北京:高等教育出版社,2004.[15]B.Ford,M.I.T.,P.Srisuresh,etc.Peer-to-Peer(P2P)communicationacrossmiddleboxes./draft-ford-midcom-p2p-01.txt2004[16]飛思科技產(chǎn)品研發(fā)中心.Java2應(yīng)用開(kāi)發(fā)指南[J].北京:電子工業(yè)出版社,2002[17]薛為民,夏文紅,解侖.Java應(yīng)用教程北京:北京交通大學(xué)出版社2005[18][19]/[20]/[21]/tech/article1101.html致謝本文討論了如何利用JAVA技術(shù)開(kāi)發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點(diǎn)。在當(dāng)今電腦網(wǎng)絡(luò)密布的世界當(dāng)中,一個(gè)簡(jiǎn)單高效的局域網(wǎng)通信工具是如此的具有實(shí)用性,所以我們應(yīng)當(dāng)重視對(duì)它的相關(guān)研究與開(kāi)發(fā)。在這次的畢業(yè)設(shè)計(jì)中,我應(yīng)用了JAVA開(kāi)發(fā)工具在WINDOWS平臺(tái)上開(kāi)發(fā)了一個(gè)基于WINDOWS平臺(tái)的局域網(wǎng)通信工具,在這一重要的領(lǐng)域進(jìn)行了相關(guān)的實(shí)踐,不管是對(duì)我的研究能力,還是實(shí)際動(dòng)手能力,還是資料查閱能力,都起了相當(dāng)大的益處。所以,我決定認(rèn)真總結(jié)這次畢業(yè)設(shè)計(jì)的經(jīng)驗(yàn),以及學(xué)習(xí)到的知識(shí),來(lái)更加的充實(shí)自己的頭腦和完善自己的知識(shí)結(jié)構(gòu)。系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的聊天室可以達(dá)到基本的聊天要求,具有較高的研究?jī)r(jià)值。一個(gè)月的忙碌和工作,本次畢業(yè)設(shè)計(jì)已經(jīng)接近尾聲,作為一個(gè)專科生的畢業(yè)設(shè)計(jì),由于經(jīng)驗(yàn)的匱乏,難免有許多考慮不周全的地方,如果沒(méi)有導(dǎo)師的督促指導(dǎo),以及一起工作的同學(xué)們的支持,想要完成這個(gè)設(shè)計(jì)是難以想象的。在這里再次感謝我的導(dǎo)師XXX老師。通過(guò)畢業(yè)設(shè)計(jì),發(fā)現(xiàn)自己在理論研究和實(shí)際工作能力等方面都得到了提高,受益匪淺,同時(shí)在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時(shí)總結(jié)研究成果,這些無(wú)疑會(huì)對(duì)我今后的工作和學(xué)習(xí)帶來(lái)很大的幫助。進(jìn)入社會(huì)后,我以后會(huì)更加努力,是學(xué)校給我學(xué)習(xí)的機(jī)會(huì),在以后的生活中繼續(xù)提高自己,為自己創(chuàng)造更多的機(jī)會(huì),更好的明天!基于C8051F單片機(jī)直流電動(dòng)機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對(duì)良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級(jí)倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動(dòng)監(jiān)測(cè)系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營(yíng)養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動(dòng)控制系統(tǒng)研究與開(kāi)發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測(cè)試儀的研制基于單片機(jī)的自動(dòng)找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開(kāi)發(fā)基于單片機(jī)的液壓動(dòng)力系統(tǒng)狀態(tài)監(jiān)測(cè)儀開(kāi)發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺(tái)控制器的研制基于單片機(jī)的軟起動(dòng)器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開(kāi)發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測(cè)儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開(kāi)發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動(dòng)檢測(cè)儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測(cè)量?jī)x的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房購(gòu)買協(xié)議書七篇
- 關(guān)于土地征用協(xié)議書
- 舞蹈癥病因介紹
- (立項(xiàng)備案申請(qǐng)模板)鋁型材模板項(xiàng)目可行性研究報(bào)告參考范文
- (2024)年產(chǎn)300萬(wàn)噸水穩(wěn)站項(xiàng)目可行性研究報(bào)告寫作模板立項(xiàng)備案文件一
- 2024-2025學(xué)年人教版七年級(jí)英語(yǔ)上學(xué)期期末復(fù)習(xí) 專題07 語(yǔ)法填空 【期末必刷15篇】
- 2023年天津市紅橋區(qū)高考語(yǔ)文一模試卷
- 云南省保山市智源初級(jí)中學(xué)2024-2025學(xué)年七年級(jí)上學(xué)期12月月考道德與法治試卷-A4
- 2023年布展裝修項(xiàng)目籌資方案
- 2023年可調(diào)控輥型四輥液壓軋機(jī)項(xiàng)目籌資方案
- 2025高考語(yǔ)文步步高大一輪復(fù)習(xí)講義教材文言文點(diǎn)線面答案精析
- 《工程勘察設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)》(2002年修訂本)-工程設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)2002修訂版
- 2024-2030年中國(guó)眼部保健品行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 2024山東能源集團(tuán)中級(jí)人才庫(kù)選拔(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- T-CCIIA 0004-2024 精細(xì)化工產(chǎn)品分類
- 低年級(jí)革命文化類課文教學(xué)探析
- TPM知識(shí)競(jìng)賽題庫(kù)含答案
- 中國(guó)成人失眠診斷與治療指南(2023版)解讀
- 解析德意志意識(shí)形態(tài)中的難解之謎生產(chǎn)關(guān)系概念與交往形式等術(shù)語(yǔ)的關(guān)系
- 皮膚疾病超聲檢查指南(2022版)
- 國(guó)開(kāi)機(jī)考答案-工程力學(xué)(本)(閉卷)
評(píng)論
0/150
提交評(píng)論