基于cs架構(gòu)的Java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)論文_第1頁(yè)
基于cs架構(gòu)的Java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)論文_第2頁(yè)
基于cs架構(gòu)的Java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)論文_第3頁(yè)
基于cs架構(gòu)的Java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)論文_第4頁(yè)
基于cs架構(gòu)的Java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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、 . . . 學(xué)號(hào)2009110121河 南 警 察 學(xué) 院畢 業(yè) 論 文(設(shè)計(jì))系 別 信息系 專(zhuān) 業(yè) 計(jì)算機(jī)網(wǎng)絡(luò)安全監(jiān)察 論文(設(shè)計(jì))題目 基于c/s架構(gòu)的Java網(wǎng)絡(luò)聊天系統(tǒng) 34 / 34目 錄摘要.1關(guān)鍵詞.1Abstract.2Key Words.21.引言.31.1開(kāi)發(fā)背景.61.2開(kāi)發(fā)目的和意義.61.3論文研究容.72.即時(shí)通訊系統(tǒng)的相關(guān)研究.72.1 C/S開(kāi)發(fā)模式.72.2即時(shí)通訊原理.82.3 Socket通信技術(shù)83.系統(tǒng)分析.93.1系統(tǒng)基本功能描述.93.2可行性分析.93.3系統(tǒng)需求分析.103.3.1功能分析.104.系統(tǒng)設(shè)計(jì).114.1數(shù)據(jù)庫(kù)設(shè)計(jì)114.2數(shù)

2、據(jù)庫(kù)模塊設(shè)計(jì)124.2.1聊天系統(tǒng)工作原理圖.124.2.2系統(tǒng)功能模塊圖134.2.3系統(tǒng)用例圖134.2.4活動(dòng)圖.144.3系統(tǒng)類(lèi)設(shè)計(jì).165.系統(tǒng)實(shí)現(xiàn).175.1實(shí)現(xiàn)概況.175.2注冊(cè)模塊.185.2.1流程圖185.2.2關(guān)鍵代碼185.3登錄模塊.205.3.1流程圖205.3.2關(guān)鍵代碼205.4聊天模塊.235.4.1流程圖235.4.2關(guān)鍵代碼235.5文件模塊.245.5.1流程圖245.5.2關(guān)鍵代碼255.6用戶(hù)管理模塊.265.6.1流程圖.265.7用戶(hù)/服務(wù)器界面的設(shè)計(jì).275.8結(jié)語(yǔ).30基于c/s架構(gòu)的JAVA網(wǎng)絡(luò)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘 要網(wǎng)絡(luò)聊天工具已經(jīng)作

3、為一種重要的信息交流工具,受到越來(lái)越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊 、MSN-Messager等等。該系統(tǒng)開(kāi)發(fā)主要包括一個(gè)網(wǎng)絡(luò)聊天服務(wù)器程序和一個(gè)網(wǎng)絡(luò)聊天客戶(hù)程序兩個(gè)方面。前者通過(guò)Socket套接字建立服務(wù)器,服務(wù)器能讀取、轉(zhuǎn)發(fā)客戶(hù)端發(fā)來(lái)信息,并能刷新用戶(hù)列表。后者通過(guò)與服務(wù)器建立連接,來(lái)進(jìn)行客戶(hù)端與客戶(hù)端的信息交流。其中用到了局域網(wǎng)通信機(jī)制的原理,通過(guò)直接繼承Thread類(lèi)來(lái)建立多線程。開(kāi)發(fā)中利用了計(jì)算機(jī)網(wǎng)絡(luò)編程的基本理論知識(shí),如TCP/IP協(xié)議、客戶(hù)端/服務(wù)器端模式(Client/Server模式)、網(wǎng)絡(luò)編程的設(shè)計(jì)方法等。

4、在網(wǎng)絡(luò)編程中對(duì)信息的讀取、發(fā)送,是利用流來(lái)實(shí)現(xiàn)信息的交換,其中介紹了對(duì)實(shí)現(xiàn)一個(gè)系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過(guò)分析這些情況,該聊天工具采用Eclipse為基本開(kāi)發(fā)環(huán)境和java語(yǔ)言進(jìn)行編寫(xiě),首先可在短時(shí)間建立系統(tǒng)應(yīng)用原型,然后,對(duì)初始原型系統(tǒng)進(jìn)行不斷修正和改進(jìn),直到形成可行系統(tǒng)。關(guān)鍵詞:即時(shí)通訊系統(tǒng) C/S Socket SwingThe Design and Implementation of Instant Messaging SystemAbstractAlong with the fast development of Internet, the network

5、 chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example, Netmeeting, , MSN-Messager and so on. This system development mainly includes two aspects of the server pro

6、cedure of the network chat and the customer procedure of the network chat. The former establishes the server through the Socket, the server can read and deliver the information which client side sends, and can renovate the users tabulation. The latter make a connection with the server, carries on co

7、mmunication between the client side and the client side. With the LAN correspondence mechanism principle, through inheritting the Thread kind to establish the multithreading directly. In the development, it uses the elementary theory knowledge which the computer network programmes. for example, TCP/

8、IP agreement, Client/Server pattern, network programming design method and so on. In the network programming, it realizes reading and transmission of the information, that is,informaton flows realize the information exchange, introduce information flow analysis for realizing a system, in which conta

9、ines some basic software engineering methods. After analyzes these situations, this chating tool takes Eclipse as the basic development environment and compiles in java language. first, it will establish the system application prototype in a short time. then, for the initial prototype system, it nee

10、ds constantly revised and improved, until a viable system.Keywords:Instant Messaging System; C/S ;Socket; Swing;1.引言1.1 開(kāi)發(fā)背景隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來(lái)越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯(cuò)的聊天工具,其中應(yīng)用比較廣泛的有Netmeeting、騰訊 、MSN-Messager等等。無(wú)論是個(gè)人還是企業(yè)等組織機(jī)構(gòu),對(duì)溝通的需求也在不斷發(fā)展,傳統(tǒng)的、 、等溝通方式顯然已無(wú)法滿(mǎn)足當(dāng)今人們工作和生活溝通的需要。隨著軟件、網(wǎng)絡(luò)和通訊三

11、大現(xiàn)代信息技術(shù)的發(fā)展,在溝通、協(xié)作方面有著更多方便、快捷、實(shí)時(shí)等優(yōu)勢(shì)的即時(shí)通訊,成為繼、E-Mail之后又一個(gè)完全融入每個(gè)人生活的互聯(lián)網(wǎng)工具。Java是一個(gè)由Sun公司開(kāi)發(fā)而成的新一代編程語(yǔ)言。使用它可在各式各樣不同種機(jī)器、不同種操作平臺(tái)的網(wǎng)絡(luò)環(huán)境中開(kāi)發(fā)軟件。不論你使用的是哪一種WWW瀏覽器,哪一種計(jì)算機(jī),哪一種操作系統(tǒng),只要WWW瀏覽器上面注明了“支持Java”,你就可以看到生動(dòng)的主頁(yè)。Java正在逐步成為Internet應(yīng)用的主要開(kāi)發(fā)語(yǔ)言。它徹底改變了應(yīng)用軟件的開(kāi)發(fā)模式,帶來(lái)了自PC機(jī)以來(lái)又一次技術(shù)革命,為迅速發(fā)展的信息世界增添了新的活力。1.2 開(kāi)發(fā)目的和意義網(wǎng)絡(luò)通信在當(dāng)今信息社會(huì)中起著

12、不可或缺的作用,人們可以利用網(wǎng)絡(luò)通信技術(shù)進(jìn)行即時(shí)的信息 交流。比如說(shuō) 聊天工具,它就是利用網(wǎng)絡(luò)通信技術(shù)開(kāi)發(fā)的一款眾所周知的網(wǎng)絡(luò)聊天工具。通訊工具最初雖為聊天而誕生,但其作用早已超出了聊天的疇,隨著企業(yè)即時(shí)通訊工具的出現(xiàn),即時(shí)信息在網(wǎng)絡(luò)營(yíng)銷(xiāo)中將發(fā)揮更大的作用。目前,信息交流是互聯(lián)網(wǎng)提供的主要容,網(wǎng)絡(luò)通信系統(tǒng)有多種實(shí)現(xiàn)方 式,類(lèi)似ICQ屬于一種點(diǎn)對(duì)點(diǎn)的聊天系統(tǒng);還有一種是基于Socket的集中式聊天系統(tǒng),這種聊天系統(tǒng)需要登錄統(tǒng)一的聊天服務(wù)器??紤]到要可以在局域網(wǎng)中應(yīng)用,本系統(tǒng)使用的是第二種方法,經(jīng)過(guò)設(shè)置,在局域網(wǎng)或internet上都可以使用。1.3 論文研究容1、即時(shí)通訊原理首先驗(yàn)證登陸,如果成

13、功,則建立與服務(wù)端的socket連接,服務(wù)端新開(kāi)啟一個(gè)線程專(zhuān)門(mén)為它服務(wù),將打包好的Message發(fā)送給服務(wù)器端,服務(wù)器端根據(jù)Message里面的信息,再將信息轉(zhuǎn)發(fā)給其他用戶(hù)。一個(gè)標(biāo)準(zhǔn)的C/S模式。2、Swing技術(shù)Swing是一個(gè)用于開(kāi)發(fā)Java應(yīng)用程序用戶(hù)界面的開(kāi)發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。用來(lái)實(shí)現(xiàn)客服端的界面設(shè)計(jì)。3、系統(tǒng)的構(gòu)建 客戶(hù)端采用C/S結(jié)構(gòu),以IO流的讀寫(xiě)方式作為數(shù)據(jù)庫(kù)。使用戶(hù)信息以規(guī)定的格式在本地持久化存儲(chǔ)。2.即時(shí)通訊系統(tǒng)的相關(guān)研究2.1 C/S開(kāi)發(fā)模式 C/S結(jié)構(gòu)的優(yōu)點(diǎn)是能充分發(fā)揮客戶(hù)端PC的處理能力,很多工作可

14、以在客戶(hù)端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶(hù)端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè): 而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來(lái)越普與,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問(wèn)需要專(zhuān)門(mén)的技術(shù),同時(shí)要對(duì)系統(tǒng)進(jìn)行專(zhuān)門(mén)的設(shè)計(jì)來(lái)處理分布式的數(shù)據(jù)。 客戶(hù)端需要安裝專(zhuān)用的客戶(hù)端軟件。首先涉與到安裝的工作量,其次任何一臺(tái)電腦出問(wèn)題,如病毒、硬件損壞,都需要進(jìn)行安裝或維護(hù)。還有,系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶(hù)機(jī)需要重新安裝,其維護(hù)和升級(jí)成本非常高。(大多數(shù)沒(méi)法自動(dòng)升級(jí)而需要人工升級(jí)) 對(duì)客戶(hù)端的操作系統(tǒng)一般也會(huì)有限制??赡苓m應(yīng)于win7,但不能用于Windows 2000或Windows XP?;蛘卟贿m

15、用于微軟新的操作系統(tǒng)等等,更不用說(shuō)Linux、Unix等。2.2 即時(shí)通訊原理 登陸進(jìn)入聊天軟件后,即顯示出好友列表,在線的顯示亮頭像,不在線的顯示灰色頭像。雙擊好友頭像即會(huì)顯示出聊天界面。在聊天頁(yè)面上,有發(fā)送文字,發(fā)送截圖,和發(fā)送文件的功能按鈕。點(diǎn)擊“發(fā)送”按鈕之后,程序就會(huì)把輸入的信息的種類(lèi),信息容、本人的ID號(hào)、對(duì)方的ID號(hào)以與當(dāng)前的時(shí)間等容打包成一個(gè)Message對(duì)象通過(guò)Socket發(fā)送到服務(wù)器端。服務(wù)器接收到Message之后,按照協(xié)議進(jìn)行解析和轉(zhuǎn)發(fā)。這樣,雙方的即時(shí)通訊就實(shí)現(xiàn)了。2.3 Socket通信技術(shù)Socket程序的工作過(guò)程:1、建立Socket連接:在通信開(kāi)始之前由通信雙

16、方確認(rèn)身份,建立一條專(zhuān)用的虛擬連接通道。2、數(shù)據(jù)通信:利用虛擬連接通道傳送數(shù)據(jù)信息進(jìn)行通信。3、關(guān)閉:通信結(jié)束時(shí),再將所建的虛擬連接拆除。具體如下:服務(wù)器圖 2-1 socket通信3.系統(tǒng)分析3.1 系統(tǒng)基本功能描述客戶(hù)端可以實(shí)現(xiàn)注冊(cè),即時(shí)聊天、在線好友查看、好友上、下線彈出窗口通知、服務(wù)器后臺(tái)系統(tǒng)信息發(fā)布,相互之間收發(fā)文件等等。還有,收發(fā)消息時(shí),可以實(shí)現(xiàn)離線接收。服務(wù)器端應(yīng)當(dāng)建立一個(gè)ServerSocket,并且不斷進(jìn)行偵聽(tīng)是否有客戶(hù)端連接或者斷開(kāi)連接(包括判斷沒(méi)有響應(yīng)的連接超時(shí))。服務(wù)器端應(yīng)當(dāng)是一個(gè)信息發(fā)送中心,所有客戶(hù)端的信息都傳到服務(wù)器端,由服務(wù)器端根據(jù)要求分發(fā)信息。3.2 可行性分

17、析本系統(tǒng)的可行性分析包括以下幾個(gè)方面的容:(1) 技術(shù)可行性使用Swing 和socket技術(shù),可以很輕松地開(kāi)發(fā)出實(shí)用、簡(jiǎn)便、高效的基于網(wǎng)絡(luò)的即時(shí)通訊系統(tǒng)。因此技術(shù)上是可以實(shí)現(xiàn)的。(2) 經(jīng)濟(jì)可行性計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)普與,因此在網(wǎng)絡(luò)設(shè)備上不需要進(jìn)行大的投入。本系統(tǒng)需要Java JRE環(huán)境,由于并發(fā)使用人數(shù)比較少,所以成本很低。(3) 操作可行性只要一臺(tái)以上計(jì)算機(jī)連接在同一個(gè)局域網(wǎng),本系統(tǒng)就可以安裝使用,所以操作上完全不存在問(wèn)題。如果要實(shí)現(xiàn)internet上通訊,只需要將服務(wù)器端運(yùn)行在一個(gè)有固定IP的公網(wǎng)上就可以。綜上所述,即時(shí)Java即時(shí)通訊系統(tǒng)是可行的。3.3 系統(tǒng)需求分析3.3.1功能分析本系

18、統(tǒng)要實(shí)現(xiàn)的功能如下:1)注冊(cè)服務(wù)器收到用戶(hù)的注冊(cè)請(qǐng)求,便開(kāi)始接受客戶(hù)傳遞的信息,諸如客戶(hù)的呢稱(chēng),性別,籍貫,個(gè)人資料等,接受完畢后,便通過(guò)JDBC與后臺(tái)數(shù)據(jù)庫(kù)連接,然后向數(shù)據(jù)庫(kù)添加記錄,如果成功,便向客戶(hù)返回其??蛻?hù)收到服務(wù)器返回的信息后,便打開(kāi)窗口登陸。2)登陸在客戶(hù)端,用戶(hù)輸入其和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登錄,服務(wù)器收到后,開(kāi)始通過(guò)JDBC讀取數(shù)據(jù)庫(kù),然后與用戶(hù)輸入的信息進(jìn)行比對(duì),如果成功,便打開(kāi)主程序窗口。然后客戶(hù)向服務(wù)器請(qǐng)求讀取好友,服務(wù)器收到該請(qǐng)求,從數(shù)據(jù)庫(kù)中取出好友列表,然后向客戶(hù)端發(fā)送這些信息,客戶(hù)收到后就在主窗口顯示好友。3)聊天客戶(hù)端首先發(fā)送消息到服務(wù)器端

19、,服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來(lái)轉(zhuǎn)發(fā)。例如服務(wù)器接收到一個(gè)A發(fā)給B的消息,先判斷B是否已經(jīng)在線,如果在線就將信息發(fā)送過(guò)去。如果B不在線則把信息儲(chǔ)存在服務(wù)器,等B上線了在發(fā)送給他。B接收到A發(fā)來(lái)的信息,如果是未建立對(duì)話(huà)窗口,則自動(dòng)打開(kāi)顯示。4)發(fā)送截圖客戶(hù)端A點(diǎn)擊截圖按鈕,將屏幕鎖定,截取圖片,將圖片儲(chǔ)存在byte數(shù)組中發(fā)送到服務(wù)器端。服務(wù)器端根據(jù)發(fā)送人信息和接收者信息來(lái)轉(zhuǎn)發(fā)。B接收到A發(fā)來(lái)的截圖信息,會(huì)根據(jù)byte構(gòu)造圖片,將圖片顯示出來(lái)。同樣,如果是未建立對(duì)話(huà)窗口,則自動(dòng)打開(kāi)顯示。5)發(fā)送文件客戶(hù)端A點(diǎn)擊發(fā)送文件按鍵,從本地選擇文件,將文件在byte數(shù)組中分批次發(fā)送到服務(wù)器端。服務(wù)器端

20、根據(jù)發(fā)送人信息和接收者信息來(lái)轉(zhuǎn)發(fā)。B接收到A發(fā)來(lái)的文件信息,會(huì)根據(jù)文件發(fā)送的狀態(tài)和byte構(gòu)造文件。6)日志客戶(hù)端發(fā)送和接收到的信息都會(huì)儲(chǔ)存在文本文檔中。默認(rèn)儲(chǔ)存在C盤(pán)下面,會(huì)以用戶(hù)的登錄賬號(hào)為名。7)對(duì)用戶(hù)的操作 管理員通過(guò)B/S的系統(tǒng)對(duì)用戶(hù)進(jìn)行增加,修改,刪除,查找等操作,對(duì)系統(tǒng)進(jìn)行維護(hù)。8)在線用戶(hù)的操作 管理員通過(guò)B/S的系統(tǒng)對(duì)在線用戶(hù)操作,可以踢用戶(hù)下線。4.系統(tǒng)設(shè)計(jì)4.1 數(shù)據(jù)庫(kù)設(shè)計(jì)本系統(tǒng)中所涉與的主要實(shí)體與其屬性有:用戶(hù)(用戶(hù)賬號(hào),用戶(hù)名,密碼,個(gè)性簽名,頭像ID,年齡,性別)E-R模型如圖所示。圖 4-1系統(tǒng)實(shí)體與其屬性表4-1 User字段名數(shù)據(jù)類(lèi)型字段說(shuō)明鍵引用備注acco

21、untint(6)IDPK主鍵(自動(dòng)增一)namevarchar(20)用戶(hù)名稱(chēng)非空passwordvarchar(20)用戶(hù)密碼非空signatureVarchar(255)簽名profileIDint(2)頭像IDageint(3)年齡sexsex char(2)性別4.2 系統(tǒng)模塊設(shè)計(jì)4.2.1 聊天系統(tǒng)工作原理圖圖 4-2 系統(tǒng)工作原理4.2.2 系統(tǒng)功能模塊圖:圖 4-3 系統(tǒng)模塊4.2.3 系統(tǒng)用例圖:普通用戶(hù)的用例圖:圖 4-4 普通用戶(hù)用例圖4.2.4 活動(dòng)圖:1)用戶(hù)登陸活動(dòng)圖首先填寫(xiě)登陸信息,提交以后服務(wù)器會(huì)對(duì)用戶(hù)名和密碼進(jìn)行驗(yàn)證。如果不正確,返回一個(gè)提示信息。如果登陸成功

22、,就更新在線狀態(tài)。通知所有好友自己已經(jīng)上線。服務(wù)器再檢查是否有他的離線消息,如果有這立即發(fā)送給用戶(hù)。圖 4-6 用戶(hù)登錄活動(dòng)圖2)發(fā)送消息活動(dòng)圖短消息發(fā)送以后,服務(wù)器端對(duì)應(yīng)的監(jiān)聽(tīng)線程會(huì)接收到一個(gè)數(shù)據(jù)包。此包中包含接收者的信息,如果接收者在線,數(shù)據(jù)包將會(huì)轉(zhuǎn)發(fā)到接收者。如果不在線,存在服務(wù)器端,等它上線在發(fā)送。圖 4-7發(fā)送消息活動(dòng)圖4.3 系統(tǒng)類(lèi)設(shè)計(jì)4.3.1 服務(wù)端線程的設(shè)計(jì):服務(wù)器端的核心是對(duì)應(yīng)客戶(hù)的線程,每個(gè)socket對(duì)應(yīng)一個(gè)線程,也就是每一個(gè)客戶(hù)端都在服務(wù)器端有一個(gè)相應(yīng)的線程。它負(fù)責(zé)轉(zhuǎn)發(fā)客戶(hù)端發(fā)來(lái)的消息。線程類(lèi)為ClientThread:表4-3 ClientThread類(lèi)屬性名作用p

23、ublicvoid notifyOnline()通知其他線程,自己上線了,讓客戶(hù)方更新頭像publicvoid run() 線程的主題,轉(zhuǎn)發(fā)消息publicvoid notifyOffline()通知其他線程,自己下線了,讓客戶(hù)方更新頭像publicvoid send(Object o) 發(fā)送消息public Object receive() 接收消息4.3.2 客戶(hù)端線程類(lèi)設(shè)計(jì)屬性名作用public intlogin (String username,String password)傳入密碼給服務(wù)器端驗(yàn)證publicvoid run() 線程的主題,讀取服務(wù)器端發(fā)來(lái)的資料并顯示相關(guān)容publ

24、ic voidsendMsg2Server(bytedata)向服務(wù)器端發(fā)送信息public void sendCheckMsg2Server()向服務(wù)器發(fā)送確認(rèn)信息,確保鏈路通暢public void MonitorThread()檢測(cè)連接狀態(tài),確保鏈路通暢5.系統(tǒng)實(shí)現(xiàn)5.1 實(shí)現(xiàn)概況本系統(tǒng)可分為登錄、聊天、文件、用戶(hù)管理和注冊(cè)五個(gè)功能模塊。“登錄”模塊為用戶(hù)提供登錄界面,并在用戶(hù)登錄顯示好友列表;“聊天”模塊實(shí)現(xiàn)用戶(hù)的即時(shí)傳送信息,即多用戶(hù)即時(shí)聊天,可以發(fā)送文字;“文件”模塊主要實(shí)現(xiàn)一用戶(hù)向另一用戶(hù)發(fā)送文件,對(duì)方可以選擇接受或者拒絕。聊天記錄會(huì)以文本文檔格式保存。下面詳細(xì)介紹各個(gè)模塊的具體

25、實(shí)現(xiàn)。5.2 注冊(cè)模塊5.2.1 流程圖圖 5-1 用戶(hù)注冊(cè)流程圖5.2.2 關(guān)鍵代碼publicclass Regist private Socket socket = null;private OutputStream os ; private DataOutputStream dos;private DataInputStream dis;private RegistMsg rm;privateintanswer=-1;publicvoid setAnswer(int answer) this.answer = answer;publicint getAnswer() returnans

26、wer;public Regist(RegistMsg rm)try Socket rs = new Socket("",9999);this.socket=rs;this.rm=rm;System.out.println("client: "+new DateProcess().lProcess()+" 成功到服務(wù)器."); catch (UnknownHostException e) System.out.println("client: "+new DateProcess().lProces

27、s()+" 未知的服務(wù)器."); catch (IOException e) System.out.println("client: "+new DateProcess().lProcess()+" 讀寫(xiě)錯(cuò)誤或者服務(wù)器未開(kāi)啟.");/注冊(cè)方法publicint regist(RegistMsg rm) throws ExceptionInputStream is = socket.getInputStream();os = socket.getOutputStream();dos=new DataOutputStream(os);di

28、s=new DataInputStream(is);byte data = new Pack().pack(rm) ;System.out.println("sdds"+dos);dos.write(data);dos.flush();byte r = newbyte4;dis.read(r);String answer = new String(r).trim();return Integer.parseInt(answer);5.3 登錄模塊5.3.1 流程圖圖 5-3 登錄流程圖5.3.2 關(guān)鍵代碼1)客戶(hù)端代碼String username = name_text.

29、getText();String password = pwd_text.getText();System.out.println(username+"-"+password);if(username=null|"".equals(username)|password=null|"".equals(password)javax.swing.JOptionPane.showMessageDialog(null, "用戶(hù)名和密碼不能為空");return;elseframe.dispose();ClientThread

30、 client = new ClientThread();int result = client.login(username, password);/已經(jīng)登錄if(result=1)javax.swing.JOptionPane.showMessageDialog(null, "該用戶(hù)已經(jīng)登錄");/用戶(hù)名,密碼不匹配elseif(result=2)javax.swing.JOptionPane.showMessageDialog(null, "用戶(hù)名和密碼不匹配");/登錄成功elseif(result=0)/將該用戶(hù)添加到ClientTools里面

31、ClientTools.setClient(client);client.start();process = new ThreadProcess(Integer.parseInt(username);process.addtray(new SystemtrayListener();ClientTools.pt=process;process.start();2)服務(wù)器端代碼:服務(wù)器端接收用戶(hù)驗(yàn)證信息的代碼被寫(xiě)在了一個(gè)線程publicclass ServerThread extends Thread中,這樣服務(wù)器就可以不停的監(jiān)聽(tīng)端口,接收來(lái)自不同客戶(hù)端的請(qǐng)求,建立socket連接,也不會(huì)堵塞在主

32、線程當(dāng)中。public Socket getClient()returnthis.client;privateintuserID;/獲得用戶(hù)IDpublicint getUserID() returnuserID;publicvoid setUserID(int userID) this.userID = userID;如果驗(yàn)證成功,查找是否有他的離線消息,有就發(fā)送給他。然后在服務(wù)器上專(zhuān)門(mén)開(kāi)啟一個(gè)針對(duì)當(dāng)前用戶(hù)的線程,并且吧線程放入管理類(lèi)中,便于日后的管理。LogonMsg lom = new LogonMsg();lom.setDest(0);lom.setSource(0);lom.setT

33、ype(Protocol.LOGON_MESSAGE);lom.setId(getUserID();lom.setTotalLen(20);for(int f =1;f<firend.length;f+)for(ServerThread st :ChatTools.onlineUser)if(st.getUserID()=Integer.parseInt(firendf)st.getDos().write(new Pack().pack(lom);st.getDos().flush();System.out.println("server: "+new DatePro

34、cess().lProcess()+"下發(fā)一條好友上線信息."); /發(fā)送離線消息if(ChatTools.offlineMsg.size()!=0)for (Iterator it = ChatTools.offlineMsg.iterator();it.hasNext();)MessageHead tm = (MessageHead)it.next();if(tm.getDest()=getUserID()this.dos.write(new Pack().pack(tm);this.dos.flush();it.remove();System.out.println(

35、"server: "+new DateProcess().lProcess()+"下發(fā)一條好友留言信息.");5.4 聊天模塊5.4.1 流程圖圖 5-4 聊天流程圖5.4.2 關(guān)鍵代碼dous.writeInt(totalLen);dous.writeInt(type);dous.writeInt(dest);dous.writeInt(source);dous.writeInt(rm.getUserID();System.out.println("打包時(shí)候的userID "+rm.getUserID();String tempPa

36、ssword = rm.getPassword();while(tempPassword.getBytes().length<16)tempPassword+="0"String tempNickname = rm.getNickname();while(tempNickname.getBytes().length<20)tempNickname+="0"String tempPhoto = rm.getPhoto();while(tempPhoto.getBytes().length<256)tempPhoto+="0&qu

37、ot;String tempSign = rm.getSign();while(tempSign.getBytes().length<100)tempSign+="0"dous.write(tempPassword.getBytes();dous.write(tempNickname.getBytes();dous.write(tempPhoto.getBytes();dous.write(tempSign.getBytes();5.5 文件模塊5.5.1 流程圖圖 5-6 發(fā)送文件流程圖5.5.2 關(guān)鍵代碼在客戶(hù)端采用JfileChooser來(lái)瀏覽本地文件,點(diǎn)擊瀏覽

38、按鈕后,會(huì)彈出對(duì)話(huà)框,讓用戶(hù)選擇文件,然后將文件名,大小等信息封裝在數(shù)據(jù)包里,發(fā)送出去。關(guān)鍵代碼如下:if(JLabel)e.getSource().getName().equals("file")JFileChooser jf=new JFileChooser("請(qǐng)選擇所要發(fā)送的文件"); /文件選擇器jf.setDialogTitle("請(qǐng)選擇文件");int result = jf.showOpenDialog(null);jf.setVisible(true);if (result = JFileChooser.APPROVE

39、_OPTION) selectedFile = jf.getSelectedFile();if (selectedFile.exists() int len =0; FileInputStream fis; String name = selectedFile.getName(); ClientT=name; ClientTr.setText("文件傳送邀請(qǐng)已經(jīng)發(fā)出,等待對(duì)方回應(yīng)."); ClientTools.path=selectedFile.getAbsolutePath();try fis = new FileInputStream(selectedFile);len = fis.available();byte data = newbytelen;fis.read(data); catch (Exception e1) e1.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ù)網(wǎng)僅提供信息存儲(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)論