基于java的android即時通訊軟件畢業(yè)設計_第1頁
基于java的android即時通訊軟件畢業(yè)設計_第2頁
基于java的android即時通訊軟件畢業(yè)設計_第3頁
基于java的android即時通訊軟件畢業(yè)設計_第4頁
基于java的android即時通訊軟件畢業(yè)設計_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

-31-摘要在網(wǎng)絡越來越發(fā)達的今天,人們對網(wǎng)絡的依賴越來越多,越來越離不開網(wǎng)絡,由此而產(chǎn)生的聊天工具越來越多,例如,國外的ICQ、國內(nèi)騰訊公司開發(fā)的OICQ?;贘ava網(wǎng)絡編程的強大功能,本次畢業(yè)設計使用Java編寫一個運行在android2.2版本以上的即時通訊軟件。

一般來說,聊天工具大多數(shù)由客戶端程序和服務器程序外加服務器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶端/服務器架構(gòu)模式通過Java提供的Socket類來連接客戶機和服務器并使客戶端和服務器之間相互通信,由于聊天是多點對多點的,Java提供的多線程功能用多線程可完成多點對多點的聊天,數(shù)據(jù)庫管理系統(tǒng)用MYSQL完成并通過ADO.Net訪問數(shù)據(jù)庫。本系統(tǒng)建立在JAVA平臺上,系統(tǒng)的設計使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O計原則。系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務器端之間通過Socket傳送消息。使用JAVA語言編寫,開發(fā)工具采用Eclipse。服務器端設計與實現(xiàn)過程中,采用了多線程技術(shù),可以在單個程序當中同時運行多個不同的線程,執(zhí)行不同的任務。大大增強了程序?qū)Ψ掌髻Y源的利用。即時通訊系統(tǒng)完成后將可進行多人對多人的聊天,對好友進行查找和添加,對新用戶的注冊,發(fā)送消息、接受消息等等功能。關鍵字:多線程;客戶機/服務器;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國內(nèi)外聊天系統(tǒng)的研究現(xiàn)狀 11.2Java語言 21.2.1Java的發(fā)展歷史 21.2.2Java的特點 31.2.3Java與Internet 41.3Socket編程 41.3.1關于TCP/IP協(xié)議 41.3.2服務器和客戶機 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)運行需求 82.2數(shù)據(jù)流圖 82.2.1頂層數(shù)據(jù)流圖 82.2.2一層數(shù)據(jù)流圖 92.2.3二層數(shù)據(jù)流圖 93概要設計 113.1系統(tǒng)實現(xiàn)原理 113.2系統(tǒng)實現(xiàn)層次圖: 123.3各模塊詳細功能 123.3.2服務器端結(jié)構(gòu) 123.3.2客戶端結(jié)構(gòu) 144詳細設計 194.1系統(tǒng)流程圖 194.1.1系統(tǒng)總體流程圖 194.1.2系統(tǒng)客戶端流程圖 204.2編寫服務器端程序 204.2.1問題陳述 204.2.2解決方案 214.3客戶端程序編寫 284.3.3聊天室 38參考文獻 46致謝 451緒論1.1國內(nèi)外即時通訊系統(tǒng)的研究現(xiàn)狀目前國內(nèi)外做即時通訊軟件的公司很多,產(chǎn)品也琳瑯滿目,國內(nèi)有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為LiveMessenger)以及跨平臺Gaim等。本人取最具代表性的QQ和MSN進行了一些研究,作為我開發(fā)即時通訊的準備。騰訊無疑是國內(nèi)即時通訊市場的霸主,自從99年進入即時通訊領域并迅速占市場之后,其在國內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對微軟MSN的強大攻勢,騰訊QQ的時常占有率依然穩(wěn)步增長。騰訊的成功與其對QQ的不斷創(chuàng)新和完善是分不開的。參考了許多網(wǎng)絡上的資料,以及自己通過觀察騰訊QQ運行時的各種細節(jié)??梢源_定騰訊QQ是以多服務器提供服務、服務器總控客戶端、客戶端之間UDP直連通信的。并且在兩個客戶端之間不能建立直連的情況下,才由服務器進行中轉(zhuǎn)通信。其模型如圖1-1圖1-1騰訊QQ服務器-客戶端模型1與騰訊QQ不同,微軟的MSNMessenger只使用了TCP作為傳輸層通信協(xié)議,所有客戶端與服務器進行連接,然后通過與服務器的TCP連接進行中轉(zhuǎn)通信。其模型如圖1-2圖1-2MSN服務器-客戶端模型2騰訊使用的模型中,服務器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務器的處理壓力,但其內(nèi)部協(xié)議和實現(xiàn)復雜度都較高。而MSNMessenger所有數(shù)據(jù)都要經(jīng)過服務器,所以服務器方的數(shù)據(jù)量會大一些(這也是平時很少見到使用MSN進行語音視頻聊天的)。綜合騰訊QQ和微軟MSNMessenger的特點和我所學專業(yè)技術(shù)范疇,我打算在我的系統(tǒng)中嘗試建立MSN的服務器-客戶端模型,但以單服務器提供服務。1.2Java語言1.2.1Java的發(fā)展歷史Java的發(fā)展歷史,可以追朔到1990年。當時SunMicrosystem公司為了發(fā)展消費類電子產(chǎn)品進行了一個名為Green的項目計劃。這個計劃的負責任是JamesGosling。起初他用具有面向?qū)ο筇卣鞯腃++語言編寫嵌入式軟件,可以放在面包機或PDA(PersonalDigitalAssistant,個人數(shù)字主力)等小型電子消費這杯里,以使設備變得更為“聰明”,更具備人工只能。但后來發(fā)現(xiàn)C++并不適合這類任務;因為C++常會使系統(tǒng)失效。尤其在內(nèi)存管理方面,c++采用直接地址訪問方式。需要程序員記錄并管理內(nèi)存資源。這造成程序員編程的極大負擔,并可能產(chǎn)生多個Bugs。面包機上的程序錯誤可能使面包機燒壞甚至爆炸。為了解決此類問題,Gosling決定開發(fā)一種新的語言,并取名為Oak。它采用了大部分與C++類似的語法對可能具備危險性的功能加以改進,例如將內(nèi)存管理改為由語言自己進行管理,以減少程序員的負擔及可能發(fā)生的錯誤。Oak是一種可移置的語言,它是一種平臺獨立的語言,能夠在各種芯片上執(zhí)行,可以降低設備的研發(fā)成本。1.2.2Java的特點Java是一種簡單、安全、容易適用、面向?qū)ο蟆⒖梢浦?、高性能、多線程的語言。簡單性Java語言簡單高校,基本Java系統(tǒng)(編譯器和解釋器)所占空間不足250KB由于Java最初是為了對家用電器進行集成控制而設計的,因而具備簡單命了的特征。面向?qū)ο竺嫦驅(qū)ο蠹夹g(shù)是現(xiàn)代工業(yè)的一次革新,提高了軟件的模塊化程度和重復適用率,縮短了軟件開發(fā)時間,減低了卡發(fā)成本。在Java之前雖然已經(jīng)有面向?qū)ο蟮某绦蛟O計語言問問世,但有些如c++并不是完全的面向?qū)ο?,而是面向過程和面向?qū)ο蟮幕旌象w。Java則是完全面向?qū)ο蟮某绦蛟O計語言。安全性Java是可以用在網(wǎng)路及分布環(huán)境下的網(wǎng)路程序設計語言。在網(wǎng)路環(huán)境下,語言的安全性變得更為重要。Java提供了許多安全機制來保證其適用上的安全性。平臺獨立平臺獨立指程序不受操作平臺的限制,可以應用在各種平臺上。Java源程序經(jīng)過編譯后生成字節(jié)碼文件,而字節(jié)碼與具體的計算機無關。只要計算機安裝了能解釋執(zhí)行字節(jié)碼的Java虛擬機JVM,就可以執(zhí)行字節(jié)碼文件,從而實現(xiàn)Java的平臺獨立性。多線程Java具備內(nèi)建的多線程功能,可以將一個程序的不同程序段設置為不同的線程,使各線程并發(fā)、獨立執(zhí)行,提高系統(tǒng)的運行效率。6.網(wǎng)絡功能Java能從全球網(wǎng)絡資源獲取所需信息,如數(shù)據(jù)文件、影響文件、聲音文件等,并對所得信息進行處理,所以說Java是一種網(wǎng)絡語言。7.執(zhí)行效率Java的字節(jié)碼需要經(jīng)過Java虛擬機JVM解釋成機器碼才能執(zhí)行,所以速度上較慢。但是隨著JVM技術(shù)的進步,使得其執(zhí)行速度直逼C與C++。1.2.3Java與InternetJava語言取得成功的領域之一就是網(wǎng)絡(其他語言)數(shù)頁代碼>(Java)一條語句。TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是internet的主要協(xié)議,定義了計算機和外設進行通信所使用的規(guī)則(應用層,傳輸層,網(wǎng)絡層,鏈路層).大多數(shù)基于internet的應用程序被看作TCP/IP協(xié)議的上一層.如:ftp,http,smtp,pop3,telnet,nntp等。

IP地址:TCP/IP網(wǎng)絡中的每臺計算機都有唯一的地址--IP地址.在Java中,有一個用來存儲internet地址的類叫InterAddress.Java提供的網(wǎng)絡功能有三大類:URL,Socket,Datagram.1、URL是三大功能中最高級的一種,通過URLJava程序可以直接送出或讀入網(wǎng)絡上的數(shù)據(jù).2、Socket是傳統(tǒng)網(wǎng)絡程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡的通信信道.3、Datagram是更低級的網(wǎng)絡傳輸方式,它把數(shù)據(jù)的目的紀錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡上1.3Socket編程1.3.1關于TCP/IP協(xié)議TCP協(xié)議是網(wǎng)絡通信的基石,對此,Java專門提供了Socket的類庫,在其中抽象出TCP協(xié)議通信的常用方法:TCP協(xié)議與三次握手:在講述TCP協(xié)議流程前,先來聲明兩個重要的概念:(1)客戶端,首先發(fā)送TCP請求的是客戶端,客戶端一般是服務(比如數(shù)據(jù)查詢服務)的請求者。(2)服務器,在接收到客戶端的請求后(確保同客戶端的通信信道建立)服務器會向客戶端提供服務。服務器一般是服務的執(zhí)行者,會向客戶端返回服務執(zhí)行的結(jié)果。為了實現(xiàn)客戶端同服務器端的通信,客戶端首先發(fā)送一個“SYN”數(shù)據(jù)包。如果服務器收到SYN標記,它將發(fā)回一個“SYN+ACK”數(shù)據(jù)包。接著,客戶端為了表示收到了這個SYN+ACK信息,會向服務器發(fā)送一個最終確認信息(ACK包)。這種SYN,SYN+ACK,ACK的步驟被稱為TCP連接建立時的“三次握手”,在這之后,連接就建立起來了,這個連接將一直保持活動狀態(tài),直到超時或者任何一方發(fā)出一個FIN(結(jié)束)信號。這種通信模式也叫客戶端/服務器(C/S)模式。ACK=1ACK=1第一次握手,主機A向主機B發(fā)送連接請求第二次握手,主機B收到主機A的請求,向主機A回發(fā)一個確認,,同時向主機A發(fā)送一個連接請求第三次握手,主機A收到主機B發(fā)送的數(shù)據(jù)包在向主機B發(fā)送一個確認連接主機A主機BSYN=1,SEQ=SYN=1,SEQ=ACK=1,SYN=1,SEQ=ACK=1,SYN=1,SEQ=aaaaaaaaaa圖1-3三次握手協(xié)議由此可見,通過客戶端和服務器的“三次握手”,雙方可以建立暢通的通信信道,在此信道上雙方互相傳輸數(shù)據(jù)。1.3.2服務器和客戶機網(wǎng)絡最基本的目的就是讓兩臺機器連接到一起,并相互“交談”或者“溝通”。一旦兩臺機器都發(fā)現(xiàn)了對方,就可以展開一次令人愉快的雙向?qū)υ?。但它們怎樣才能“發(fā)現(xiàn)”對方呢?這就像在游樂園里那樣:一臺機器不得不停留在一個地方,偵聽其他機器說:“嘿,你在哪里呢?”

“停留在一個地方”的機器叫做“服務器”(Server);到處“找人”的機器則叫做“客戶機”(Client)或者“客戶”。它們之間的區(qū)別只有在客戶機試圖同服務器連接的時候才顯得非常明顯。一旦連通,就變成了一種雙向通信,誰來扮演服務器或者客戶機便顯得不那么重要了。

所以服務器的主要任務是偵聽建立連接的請求,這是由我們創(chuàng)建的特定服務器對象完成的。而客戶機的任務是試著與一臺服務器建立連接,這是由我們創(chuàng)建的特定客戶機對象完成的。一旦連接建好,那么無論在服務器端還是客戶機端,連接只是魔術(shù)般地變成了一個IO數(shù)據(jù)流對象。從這時開始,我們可以象讀寫一個普通的文件那樣對待連接。所以一旦建好連接,我們只需使用自己熟悉的IO命令即可。這正是Java聯(lián)網(wǎng)最方便的一個地方。圖1-4服務器和客戶機的連接1.4本文內(nèi)容安排本論文內(nèi)容安排如下:第二章為聊天系統(tǒng)的需求分析,主要介紹系統(tǒng)的可行性研究,需求分析流程圖等。第三章為概要設計,分模塊介紹系統(tǒng)的具體實現(xiàn)過程。第四章為詳細設計。2需求分析2.1.1可行性分析經(jīng)濟可行性:由于本系統(tǒng)的主要背景是畢業(yè)課程設計,不注重直接的經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺能運行Java軟件的電腦便可,所以不用考慮到經(jīng)濟問題。技術(shù)可行性:本系統(tǒng)的開發(fā)利用MicrosoftSQLServer2005作為本系統(tǒng)的數(shù)據(jù)庫,它是一個支持多用戶的新型數(shù)據(jù)庫,適用于大中規(guī)模的數(shù)據(jù)量需求。學校校園網(wǎng)的建設也為新系統(tǒng)服務器/客戶端的結(jié)構(gòu)提供了硬件的支持。使用Java作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,給開發(fā)高性能系統(tǒng)提供的保障為開發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。運行可行性:本系統(tǒng)為一個小型的即時聊天系統(tǒng),所耗費的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。綜上所述,本系統(tǒng)的設計與開發(fā)在技術(shù)上和硬件設備上的條件都是滿足的,因此,它在技術(shù)上是可行的。2.1.2系統(tǒng)功能需求本系統(tǒng)主要通過客戶端,服務器端來體現(xiàn)即時通訊的基本功能。(1)服務器端 1.處理用戶注冊 2.處理用戶登錄 3.處理用戶發(fā)送信息 4.處理用戶得到信息 5.處理用戶增刪改請求 6.處理用戶退出(2)客戶端1.用戶注冊界面及結(jié)果 2.用戶登錄界面及結(jié)果 3.用戶發(fā)送信息界面及結(jié)果 4.用戶得到信息界面及結(jié)果 5.用戶請求增刪改及結(jié)果 6.用戶退出界面及結(jié)果2.1.3系統(tǒng)性能需求實用性:為信息交流提供方便,有效進行作業(yè)管理。操作簡單:本系統(tǒng)應該適用于不同水平的使用者,包括事業(yè)單位和企業(yè)單位,同時系統(tǒng)不應太復雜和煩瑣,因此要求系統(tǒng)的操作盡可能簡單易行。技術(shù)先進:產(chǎn)品的系統(tǒng)設計和開發(fā)應緊跟著整個計算機發(fā)展潮流,采用當時最先進的設計思想,利用最新的開發(fā)技術(shù)和開發(fā)工具。使系統(tǒng)能夠無論在功能設計上,還是在技術(shù)實現(xiàn)上,都處于同行業(yè)的領先地位。安裝使用簡便:服務器端的安裝簡潔明了,客戶機無需再裝任何軟件就可以直接注冊登陸聊天。適應性:應該能廣泛應用于不同類型的企事業(yè)單位。系統(tǒng)采用模塊化設計,用戶可以根據(jù)自己的實際情況自行組合,使系統(tǒng)在不同的硬件環(huán)境下都能得以應用。代碼可讀性好:文中的代碼將盡可能簡潔,易懂。2.1.4系統(tǒng)運行需求移動客戶端需500MHz及以上的處理器移動客戶端需256MB及以上的ROM空間移動客戶端需256MB及以上的RAM空間移動客戶端需具有WiFi/GRPS網(wǎng)絡接收模塊,能正常連接到網(wǎng)絡服務端需具有P41.6GHz及以上的處理器服務端需具有80GB及以上的硬板空間服務端需具有1GB及以上的內(nèi)存空間2.2數(shù)據(jù)流圖聊天用戶服務器聊天用戶2.2.1頂層數(shù)據(jù)流圖聊天用戶服務器聊天用戶圖2-1頂層數(shù)據(jù)流圖2.2.2一層數(shù)據(jù)流圖聊天用戶聊天用戶客戶端服務器端數(shù)據(jù)流聊天用戶.2.2.3二層數(shù)據(jù)流圖用戶登錄用戶登錄用戶注冊用戶客戶端服務器端處理用戶退出用戶請求信息用戶聊天信息圖2-3系統(tǒng)二層數(shù)據(jù)流圖3概要設計3.1系統(tǒng)實現(xiàn)原理即時通訊的設計跟普通網(wǎng)站設計有著許多不同的地方,普通網(wǎng)站設計所考慮的因素,例如,普通網(wǎng)站需要對布局進入大量美化以及動畫設計等等,而即時通訊只要提供滿足訪客雙方直接實時聊天即可。因此,在設計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設計要點:在Internet上的聊天程序一般都是以服務器提供服務端連接響應,使用者通過客戶端程序登錄到服務器,就可以與登錄在同一服務器上的用戶交談,這是一個面向連接的通信過程。因此,程序要在TCP/IP環(huán)境下,實現(xiàn)服務器端和客戶端兩部分程序。圖3-1系統(tǒng)實現(xiàn)原理圖3.2系統(tǒng)實現(xiàn)層次圖:Socket連接Socket連接客戶端服務器端實時聊天好友信息請求更新信息請求好友添加/刪除注冊/登錄請求聊天消息轉(zhuǎn)發(fā)好友信息查詢用戶信息更新好友添加/刪除用戶注冊/登錄3.3各模塊詳細功能3.3.1服務器端結(jié)構(gòu)服務器監(jiān)聽控制窗體服務器監(jiān)聽控制窗體Server啟動服務器監(jiān)聽AppServer處理所有用戶請求Connection圖3-3服務器端結(jié)構(gòu)圖Server.java:服務器啟動監(jiān)聽操作。 DBUtil.java:服務器端連接數(shù)據(jù)庫,負責服務器端與數(shù)據(jù)庫連接讀取數(shù)據(jù)操作。InputThread.java:服務器端監(jiān)聽接收客戶端發(fā)來信息,處理各種請求。OutputThread.java:服務器端向客戶端發(fā)送消息。TranObject.java:服務器端與客戶端消息交換的對象類型。TranObjectType.java:服務器接受客戶端發(fā)來消息的所有類型。UserDao.java:定義一個與所有用戶操作相關的接口。UserDaoImpl.java:UserDao的具體實現(xiàn)類。運行客戶端Welcome用戶登陸Login用戶運行客戶端Welcome用戶登陸Login用戶注冊Register用戶主窗體FriendList用戶監(jiān)聽GetMsgService圖3-4客戶端結(jié)構(gòu)圖 GetMsgService.java:客戶端啟動一個服務。WelcomeActivity.java:客戶端啟動歡迎頁面。RegisterActivity.java:客戶端在線注冊界面。ChatActivity.java:客戶端聊天界面。AddFriendActivity.java:客戶端查找好友界面并提供添加好友功能。UserlistAdapter.java:客戶端好友信息數(shù)據(jù)。OwnInfodata.java:客戶端自己信息數(shù)據(jù)成員。RegisterInfo.java:客戶端注冊信息數(shù)據(jù)成員。UserInfodata.java:客戶端好友信息數(shù)據(jù)成員。Userdata.java:客戶端用戶信息數(shù)據(jù)。RegisterActivity.java:客戶端注冊界面及交互。LogonActivity.java:客戶端登錄界面及交互。ChartActivity.java:負責客戶端聊天窗體及交互。UserInfoActivity.java:客戶端好友信息界面及交互。OwnInfoActivity.java:客戶端自己信息界面及交互。FindUserActivity.java:負責客戶端好友查找界面及交互。UserListActivity.java:客戶端在線用戶界面與交互。SocketClient.java:客戶端連接服務器及與服務器進行交互。GalleryTabactivity.java:客戶端主界面,負責各項窗體操作和數(shù)據(jù)分配及交互。4詳細設計4.1系統(tǒng)流程圖4.1.1系統(tǒng)總體流程圖開始開始啟動服務器判斷啟動信息啟動客戶端判斷登錄信息登錄服務器退出服務器注冊用戶結(jié)束否是是圖4-1系統(tǒng)總體流程圖4.1.2系統(tǒng)客戶端流程圖開始開始客戶端登錄判斷主界面聊天界面好友信息界面?zhèn)€人信息界面退出結(jié)束 圖4-2客戶端流程圖4.2編寫服務器端程序4.2.1問題陳述1.能過接收用戶注冊信息并保存。2.能夠允許注冊過的用戶登錄聊天界面。3.能夠與在線好友進行自由聊天。4.服務器運行在自定義的端口8080上。5.服務器監(jiān)控用戶列表和對用戶消息進行轉(zhuǎn)發(fā)。6.服務器對用戶的請求作出處理。7.服務器對在線下線列表進行更新。4.2.2解決方案后臺數(shù)據(jù)庫設計基于服務器跨平臺運行的架構(gòu),服務器的后臺數(shù)據(jù)庫使用了SQLServer2005。(1)userInfo表:userInfo表此表主要包含了用戶帳戶基本信息。即時通訊系統(tǒng)采用賬戶、密碼的登錄方式,給每個用戶生成一個唯一ID來做系統(tǒng)內(nèi)部的用戶標識。(2)friend表friend表此表主要包含了用戶好友ID關系信息。用戶注冊1.去數(shù)據(jù)庫讀數(shù)據(jù)首先創(chuàng)建一個字符串連接并寫入查詢命令,利用dataset保存臨時數(shù)據(jù),留作后面注冊時用。2.客戶端請求注冊客戶端通過RegisterActivity.java請求注冊,填寫注冊信息,并驗證各項信息格式是否符合規(guī)定,如果不符合規(guī)定格式,則進行提示重新填寫,最后將請求信息發(fā)送給服務器端。下面是注冊驗證賬戶代碼:3.服務器端響應服務器端得到注冊請求會將對象輸入流轉(zhuǎn)化為文件輸出流,并反饋給客戶端??蛻舳说玫阶孕畔⒑髸谇芭_填寫注冊信息,然后創(chuàng)建文件輸出流,再用對象輸出流包裝后寫入本地文件將其持久化。最后關閉對象輸出流和文件輸入流。//將向量中的類寫回文件 FileOutputStreamfile=newFileOutputStream(fList); ObjectOutputStreamobjout=newObjectOutputStream(file); objout.writeObject(vList);4.給客戶端返回信息將用戶注冊成功或失敗的信息用打印流包裝Socket以后,輸出給客戶端注冊結(jié)果的詳細信息。 //發(fā)送注冊成功信息 toClient.println(clientMessage.custName+"注冊成功"); Datet=newDate(); log("用戶"+clientMessage.custName+"注冊成功,"+"注冊時間:" +t.toLocaleString()+"\n");5.關閉Socket連接當以上的程序都正常運行后,需要關閉Socket連接,否則將會浪費服務器與客戶端之間的資源。用戶登陸1.去數(shù)據(jù)庫讀用戶數(shù)據(jù)打開用戶數(shù)據(jù)庫文件“User.txt”,將用戶數(shù)據(jù)對象集載入內(nèi)存,以供下面的程序使用。//讀文件 FileInputStreamfile3=newFileInputStream("user.txt"); ObjectInputStreamobjInput1=newObjectInputStream(file3); vList=(Vector)objInput1.readObject();2.驗證用戶名是否存在在對象數(shù)據(jù)庫中查找是否有與登錄用戶的用戶名相同的記錄,如果有繼續(xù)驗證,否則退出驗證處理,返回“沒有此用戶”錯誤用戶登陸程序模塊如下: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ù)過多,請稍候再試"); break; 用戶退出1.接收退出信息當用戶退出時,客戶端將會用基于Socket的對象輸出流發(fā)送給服務器退出對象。2.在線列表中刪除用戶用戶退出后應該把用戶從在線列表中刪除,否則用戶退出用戶還在在線列表中,那么該用戶下次將會無法登錄。3.更新在線列表用戶退出后將服務器端監(jiān)控界面的用戶列表更新。否則用戶數(shù)據(jù)將會不同步。用戶退出模塊程序:publicvoidserverExit(){ Exitexit=newExit(); exit=(Exit)obj; removeUser(exit); //chenmin if(sFrame.ti.equals(exit.exitname)){ sFrame.ti=""; } Datet=newDate(); log("用戶"+exit.exitname+"已經(jīng)退出,"+"退出時間:"+t.toLocaleString()); freshServerUserList(); }接收用戶聊天信息1.接收用戶聊天信息當用戶發(fā)送聊天信息時,服務端將會收到客戶端用Socket傳輸過來的聊天信息對象,然后將其強制轉(zhuǎn)換為Chat對象。2.過濾用戶聊天內(nèi)容的非法信息分析聊天信息對象的聊天內(nèi)容,用語言過濾類將非法字符過濾掉。語言過濾的時候?qū)蜷_“badword.txt”文件,不允許出現(xiàn)的關鍵詞將會存儲在文件中,關鍵字之間以逗號分割。當聊天內(nèi)容中出現(xiàn)要過渡的關鍵字是將會被系統(tǒng)屏蔽,而聊天內(nèi)容3.接收服務器端的系統(tǒng)消息當有其他用戶登陸時,系統(tǒng)會給在線的所有用戶發(fā)送用戶登陸信息,并且通過服務器可以給各用戶發(fā)送系統(tǒng)消息。系統(tǒng)消息發(fā)出后,如再有登錄者也可以接收到系統(tǒng)消息。4.返回給客戶端當以上信息都封裝成功后,打開與客戶端連接的Socket的輸出流,然后再用ObjectOutputStream對象輸出流包裝后輸出給客戶端。publicvoidserverChat(){ //將接收到的對象值賦給聊天信息的序列化對象 ChatcObj=newChat(); cObj=(Chat)obj; //chenmin cObj.chatMessage=WordFilter.filter(cObj.chatMessage); chatLog(cObj); //將聊天信息的序列化對象填加到保存聊天信息的矢量中 userChat.addElement((Chat)cObj); return; }4.3客戶端程序編寫4.3.1程序?qū)⑼ㄟ^AddFriendActivity.java用戶注冊界面收集用戶的用戶名、密碼、電子郵箱。如上圖所示客戶端用戶注冊信息模塊程序(通過調(diào)用系統(tǒng)本省已經(jīng)定義好的向服務器發(fā)送信息的方法直接將頁面注冊的信息發(fā)送到服務器端):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ū)⑼ㄟ^LoginActivity.java用戶登錄界面收集用戶的用戶名、密碼,如圖圖4-15收集用戶登錄信息圖 Stringaccounts=mAccounts.getText().toString(); Stringpassword=mPassword.getText().toString(); if(accounts.length()==0||password.length()==0){ DialogFactory.ToastDialog(this,"QQ登錄","親!帳號或密碼不能為空哦"); }else{ showRequestDialog(); //通過Socket驗證信息 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登錄", "親!服務器暫未開放哦"); } }4.3.3聊天室當用戶登錄成功后,用戶的登錄界面將會隱藏,然后創(chuàng)建用戶聊天室窗口,在界面的標題欄將會顯示當前登錄用戶的用戶名,以防止一個機器上的用戶開多個賬號進入聊天室后分不清哪個窗口是哪個用戶登錄的,界面第一行將顯示當前在線人數(shù)。位于界面正中的兩個控件分別是List和TextBox用來顯示當前服務器上的在線會員名單列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天內(nèi)容個性化配置控件。包括聊天對象,聊天語氣,聊天內(nèi)容,聊天字體,風格,大小,顏色…….用戶發(fā)送信息用戶需要發(fā)送信息時,在聊天內(nèi)容里寫下要發(fā)送的信息,然后點擊發(fā)送就可以發(fā)送到其他客戶端,也可以選擇私聊,聊天表情,聊天信息通過服務器發(fā)送到其他客戶端。如圖:當多個用戶同時在線時可以對某個人私聊,可以查看到最近聊天用戶的列表: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,"開始聊天",0).show(); application.setRecentNum(0);保存聊天記錄當用戶需要保存聊天記錄時可以直接點擊“保存”按鈕,為了防止多用戶聊天記錄文件沖突問題,聊天記錄將會以“用戶名_message.txt”為文件名,將信息保存在當前應用程序目錄下。如圖保持模塊程序://"保存"按鈕 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)時間當用戶需要查看當前時間時,可以直接點擊“時鐘”按鈕,將會啟動一個漂亮的電子時鐘,時鐘模塊程序:publicvoidactionPerformed(ActionEvente){timer.restart();}publicvoidpaint(Graphicsg){ Insetsinsets=getInsets(); intL0=(insets.left)/2,T0=(insets.top)/2; inthh,mm,ss; Stringst; h=getSize().height; //繪制圓形…………………… //獲取時間 Calendarnow=Calendar.getInstance(); hh=now.get(Calendar.HOUR_OF_DAY);//小時 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); //計算時間和圖形的關系 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); //繪制時針 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自動生成catch塊 e.printStackTrace(); }catch(IOExceptione){ //TODO自動生成catch塊 e.printStackTrace(); } returnfileString; }退出聊天系統(tǒng)當前用戶點擊“退出”按鈕或者關閉窗口時,系統(tǒng)將會把用戶退出的信息打包成對象發(fā)送給服務器,并退出客戶端程序。//"退出"按鈕 publicvoidexit(){ Exitexit=newExit(); exit.exitname=strLoginName; //發(fā)送退出信息 try{ SockettoServer=newSocket(strServerIp,1001); //向服務器發(fā)送信息 ObjectOutputStreamoutObj=newObjectOutputStream(toServer .getOutputStream()); outObj.writeObject(exit); outObj.close(); toServer.close(); frmChat.dispose(); //this.destroy(); }catch(Exceptione){ }privatevoidexitChatRoom(){ exit(); }出現(xiàn)異常信息在用戶聊天時,當服務器關閉或者與服務器無法連接時,客戶端將會給出“不能連接到服務器!”的信息。并在用戶查看后退出客戶端。參考文獻[1]孟凡榮.數(shù)據(jù)庫原理與應用.中國礦業(yè)大學,2009(8)28-30[2]張虹.軟件工程與軟件開發(fā)工具.清華大學出版社.2009(1)55-75[3]BruceEckel.ThinkinginJava.機械工業(yè)出版社.2009(6)42-64[4]羅軍舟等.TCP/IP協(xié)議及網(wǎng)絡編程技術(shù).清華大學出版社.2008(10)[5]孫一林,彭波.Java網(wǎng)絡編程實例.清華大學出版社.2003(4)[6]李樹青.Java通用范例開發(fā)金典.電子工業(yè)出版社.2009[7]王鵬.JavaSwing圖形界面開發(fā)與案例詳解.清華大學出版社.2008[8]龐永慶,翟鵬.Java完全自學寶典.清華大學出版社.2008[9]劉永華,于春花.Java網(wǎng)絡編程.清華大學出版社.2008[10]BoostDocumentation,或[11]Boost.AsioDocumentation,[12]孫桂蘭.電子商務網(wǎng)上書店系統(tǒng).北京:人民郵電出版社,2004[13]JaloteP.Optimumcontrollimitsforemployingstatisticalprocesscontrolinsoftwareprocess.IEEETransonSoftwareEngineering,2002,28(12)[14]薩師煊,王珊.數(shù)據(jù)庫系統(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應用開發(fā)指南[J].北京:電子工業(yè)出版社,2002[17]薛為民,夏文紅,解侖.Java應用教程北京:北京交通大學出版社2005[18][19]/[20]/[21]/tech/article1101.html致謝本文討論了如何利用JAVA技術(shù)開發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點。在當今電腦網(wǎng)絡密布的世界當中,一個簡單高效的局域網(wǎng)通信工具是如此的具有實用性,所以我們應當重視對它的相關研究與開發(fā)。在這次的畢業(yè)設計中,我應用了JAVA開發(fā)工具在WINDOWS平臺上開發(fā)了一個基于WINDOWS平臺的局域網(wǎng)通信工具,在這一重要的領域進行了相關的實踐,不管是對我的研究能力,還是實際動手能力,還是資料查閱能力,都起了相當大的益處。所以,我決定認真總結(jié)這次畢業(yè)設計的經(jīng)驗,以及學習到的知識,來更加的充實自己的頭腦和完善自己的知識結(jié)構(gòu)。系統(tǒng)著重研究并實現(xiàn)了網(wǎng)絡應用的部分。根據(jù)實現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡通信效果。生成的聊天室可以達到基本的聊天要求,具有較高的研究價值。一個月的忙碌和工作,本次畢業(yè)設計已經(jīng)接近尾聲,作為一個??粕漠厴I(yè)設計,由于經(jīng)驗的匱乏,難免有許多考慮不周全的地方,如果沒有導師的督促指導,以及一起工作的同學們的支持,想要完成這個設計是難以想象的。在這里再次感謝我的導師XXX老師。通過畢業(yè)設計,發(fā)現(xiàn)自己在理論研究和實際工作能力等方面都得到了提高,受益匪淺,同時在老師的指導和課題組同學的共同幫助下,及時總結(jié)研究成果,這些無疑會對我今后的工作和學習帶來很大的幫助。進入社會后,我以后會更加努力,是學校給我學習的機會,在以后的生活中繼續(xù)提高自己,為自己創(chuàng)造更多的機會,更好的明天!基于C8051F單片機直流電動機反饋控制系統(tǒng)的設計與研究基于單片機的嵌入式Web服務器的研究MOTOROLA單片機MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基于增強型51系列單片機的TCP/IP協(xié)議棧的實現(xiàn)基于單片機的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機的交流伺服電機運動控制系統(tǒng)研究與開發(fā)基于單片機的泵管內(nèi)壁硬度測試儀的研制基于單片機的自動找平控制系統(tǒng)研究基于C8051F040單片機的嵌入式系統(tǒng)開發(fā)基于單片機的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機實現(xiàn)一種基于單片機的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機的在線間歇式濁度儀的研制基于單片機的噴油泵試驗臺控制器的研制基于單片機的軟起動器的研究和設計基于單片機控制的高速快走絲電火花線切割機床短循環(huán)走絲方式研究基于單片機的機電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機的智能手機充電器基于單片機的實時內(nèi)核設計及其應用研究基于單片機的遠程抄表系統(tǒng)的設計與研究基于單片機的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機系統(tǒng)單片機系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機的液體點滴速度自動檢測儀的研制基于單片機系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機的電能采集終端的設計和應用基

溫馨提示

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

評論

0/150

提交評論