版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科生畢業(yè)論文(設計)</p><p> 題目: 基于java的即時通信軟件設計與實現(xiàn) </p><p> 院 (系) 電子與信息工程系 </p><p> 專 業(yè) 電子信息工程 </p><p> 班 級 2009
2、級2班 </p><p> 學 生 姓 名 李 毅 </p><p> 指導教師(職稱) 王克剛(副教授) </p><p> 提 交 時 間 二〇一三年五月 </p><p><b> 版權聲明</b></p><p>
3、; 任何收存和保管本論文各種版本的單位和個人,未經本論文作者同意,不得將本論文轉借他人,亦不得隨意復制、抄錄、拍照或以任何方式傳播。否則,引起有礙作者著作權之問題,將可能承擔法律責任。</p><p><b> 原創(chuàng)性聲明</b></p><p> 本人鄭重聲明:所呈交的學位論文,是本人在導師的指導下,獨立進行研究工作所取得的成果。除文中已經注明引用的內容外,本
4、論文不含任何其他個人或集體已經發(fā)表或撰寫過的作品或成果。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明,本聲明的法律結果由本人承擔。</p><p> 論文作者簽名: 日期: 年 月 日</p><p> 基于java的即時通信軟件設計與實現(xiàn)</p><p><b> 李 毅</b><
5、;/p><p> ?。ò部祵W院電子與信息工程系,陜西安康,725000)</p><p> 摘 要 計算機網絡技術高速發(fā)展的今天,即時通訊越來越方便,使得通信軟件也變得越來越重要,所以本文做了一個即時通信軟件,該軟件主要是基于Java平臺,采用C/S結構客戶端和服務器端通過Socket發(fā)送和接收消息,并遵循java的面向對象的設計原則。該軟件使用MyEclipse開發(fā)工具,服務器端的設計
6、和實施過程中,使用多線程技術,它可以在一個程序中同時運行多個不同的線程,執(zhí)行不同的任務,大大提高服務器資源的利用率。數(shù)據(jù)庫管理系統(tǒng)用Oracle完成,并通過JDBC橋訪問數(shù)據(jù)庫。聊天系統(tǒng)將完成好友登陸、驗證登陸、多人互相聊天、新用戶注冊、添加好友、刪除好友、修改個人資料等功能。</p><p> 關鍵詞 即時聊天;系統(tǒng);Java;C/S</p><p> Instant commun
7、ication software Design and Plementation Based on Java</p><p><b> LI YI</b></p><p> (Department of Electronic and Information Engineering, Ankang University, Ankang, 725000)</p&
8、gt;<p> Abstract With the rapid development of computer network technology nowadays, instant communication becomes more and more convenient. So software for communication is more and more important at the same ti
9、me. This paper is about a instant communication software. The software is mainly based on Java platform. using C/S structure, and its client and server receive messages through the Socket to send, objecting the principle
10、s of Java. What’s more, My Eclipse is used in the software as the developmen</p><p> Key Words Instant Messager; System; JAVA; C/S</p><p><b> 目 錄</b></p><p><b>
11、 第一章 緒 論1</b></p><p><b> 1.1 引言1</b></p><p> 1.2 課題研究背景1</p><p> 1.3 系統(tǒng)實現(xiàn)的關鍵技術2</p><p> 1.4 本文工作及內容安排3</p><p> 第二章 系統(tǒng)的需求分析5&l
12、t;/p><p> 2.1 項目設計的需求描述5</p><p> 2.2 服務器端需求5</p><p> 2.3客戶端需求5</p><p> 2.4 對于發(fā)送的消息的一些協(xié)議需求5</p><p> 第三章 系統(tǒng)設計7</p><p> 3.1 軟件設計流程7</
13、p><p> 3.2 即時聊天系統(tǒng)的實施原理7</p><p> 3.2.1 工作方式和技術原理7</p><p> 3.2.2 通訊方式8</p><p> 3.3 功能模塊劃分9</p><p> 3.3.1 服務器端9</p><p> 3.3.2 客戶端9</p
14、><p> 第四章 數(shù)據(jù)庫概要設計11</p><p> 4.1 系統(tǒng)實體及實體關系圖11</p><p> 4.2 用戶表12</p><p> 4.3 好友表(friends)12</p><p> 4.4 在線狀態(tài)表(logtype)13</p><p> 4.5 登陸表
15、13</p><p> 4.6 離線信息表13</p><p> 第五章 詳細設計15</p><p> 5.1 服務器端的設計與實現(xiàn)15</p><p> 5.2 用戶注冊模塊16</p><p> 5.3 登陸模塊17</p><p> 5.3.1登錄模型圖17&l
16、t;/p><p> 5.3.2登錄驗證17</p><p> 5.4 添加好友、刪除好友、修改個人資料模塊20</p><p> 5.5 發(fā)送和接收消息模塊21</p><p> 5.5.1 聊天流程21</p><p> 5.5.2發(fā)送和接收消息22</p><p> 5.6
17、 關閉客戶端23</p><p> 第六章 系統(tǒng)測試25</p><p> 6.1 系統(tǒng)測試案例25</p><p> 6.2 測試結果和分析25</p><p> 第七章 總結與展望29</p><p><b> 參考文獻30</b></p><p>
18、;<b> 致 謝31</b></p><p><b> 附 件32</b></p><p><b> 第一章 緒 論</b></p><p><b> 1.1 引言</b></p><p> 隨著科學技術的發(fā)展,人類目前已經處于信息時代
19、。人和人之間的信息交流具有了多種途徑。不僅可以面對面的直接交流,還可以借助于一些先進的工具如電話、網絡等實現(xiàn)遠程交流。人們最為熟悉的QQ就是實現(xiàn)遠程交流的應用典范。針對企業(yè)的專業(yè)化即時通訊也迅速成長,具備安全性和多用途的互動辦公通訊軟件平臺隨之誕生,它們大都集成文字、聲音、視頻、屏幕、即時郵件、文件共享與下載的諸多功能,能滿足用戶的各種需要。并且即時通訊技術有將無線通訊融入計算機網絡的趨勢,其前景是非常光明的。本課題研究的是支持內部網絡
20、交流的系統(tǒng)——網絡即時通訊系統(tǒng)。</p><p> 1.2 課題研究背景</p><p> 即時通訊系統(tǒng)是一種非常便捷的網絡通訊技術,利用互聯(lián)網建立起網絡虛擬環(huán)境,通過計算機鍵盤或無線設備在網絡上進行實時信息交流,成為一種提供公共通訊、商務通訊及商務合作的新媒介,同時也彌補了傳統(tǒng)通訊形式的不足,尤其是電子郵件及語音通信方面的不足。即時通訊工具在實現(xiàn)傳輸視頻與音頻信息,使協(xié)作成員可以遠距
21、離進行直觀、真實的文字交流的同時,利用多媒體的技術,它還可以幫助使用者對工作中各種信息進行處理。隨著即時通信普及,全球即時通信用戶的數(shù)量也不斷增長。</p><p> 目前即時聊天系統(tǒng)種類眾多,功能也較為齊全,但MSN、QQ等公共消息系統(tǒng),由于聊天對象及內容的不可控,若在企業(yè)內部使用,可能會降低工作效率。本文所研究的即時通訊系統(tǒng)的應用目標定位于企業(yè)內部網絡,將自己的服務器端安裝在企業(yè)內,并且人員的創(chuàng)建是由系統(tǒng)管
22、理員來完成,因此很好的解決企業(yè)或單位的信息溝通及協(xié)同問題,提高工作效率。在該系統(tǒng)中,企業(yè)內部員工可以利用該通訊系統(tǒng)隨時隨地發(fā)送文字消息,系統(tǒng)包括客戶端程序和服務器端程序,支持局域網和Internet。企業(yè)內部員工之間可以在內部網覆蓋的任何地點、任何時間進行即時交流,幫助實現(xiàn)企業(yè)內部協(xié)同工作。</p><p> 即時通訊帶給了更大的互動性,人們在交流彼此的看法、意見時,發(fā)現(xiàn)采用你來我往的方式達到的效果最為明顯。這
23、就體現(xiàn)了互動性。通過使用及時通訊系統(tǒng),大家不需要借助其它額外的工具,就可以在線實時地交流工作,即時通信軟件是網絡軟件的一個重要應用,構造的成本低、實時性好、網上交流平臺便捷的特點決定了它的普及性,使其成為了在互聯(lián)網上和他人聯(lián)系的重要方式,應用于企事業(yè)單位內部的即時通訊軟件,可以推動政府機構、大型事業(yè)單位信息化的建設!因此開發(fā)該類型即時通訊軟件也就具有重要的意義。</p><p> 1.3 系統(tǒng)實現(xiàn)的關鍵技術&l
24、t;/p><p> (1) 系統(tǒng)開發(fā)語言選擇</p><p> 經過認真的討論分析,最終決定選擇純面向對象的Java語言來完成本項目的設計和實現(xiàn),下面對Java語言作簡要介紹。</p><p> Java是一種簡單、多線程、安全、容易適用、可移置、面向對象、高性能的語言。具有以下特點:</p><p> 面向對象:面向對象技術可以提高模塊
25、化程度和重復使用率,縮短軟件開發(fā)時間降低開發(fā)成本。</p><p> 安全性:Java提供了許多安全機制,是一種能應用于網絡和分布環(huán)境下的程序設計語言。</p><p> 多線程:Java具備內建的多線程功能使各線程并發(fā)、獨立執(zhí)行提高系統(tǒng)的運行效率。</p><p> 平臺獨立:平臺獨立是指程序不受操作平臺限制可以應用于各種平臺。Java源程序經過編譯后能夠生
26、成字節(jié)碼文件,字節(jié)碼和具體的計算機無關。計算機安裝能解釋執(zhí)行字節(jié)碼的JVM就能執(zhí)行字節(jié)碼文件實現(xiàn)了Java的平臺獨立性。</p><p> 執(zhí)行效率: Java程序的開發(fā)通常需要經過編寫源程序、編譯生成字節(jié)碼和運行三個過程。這一編譯過程同C/C++的編譯有些不同,C編譯器編譯時,該代碼是為在某一特定硬件平臺運行而形成的,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為相應的內存偏移量,以保證程序運行。而J
27、ava編譯器卻不將對方法和變量的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內存布局,而是將這些符號引用信息保留在字節(jié)碼中,由解釋器在運行過程中創(chuàng)立內存布局,然后再通過查表來確定一個方法所在的地址。Java應用程序的開發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個部分。這樣就有效的保證了Java的運行效率。</p><p><b> (2) 系統(tǒng)架構</b></p><p>
28、 經過分析,我采用的軟件架構是C/S架構, C/S就是指客戶機/服務器模式,客戶機向服務器發(fā)出數(shù)據(jù)請求,服務器將數(shù)據(jù)進行計算,計算完畢后,將計算結果返回給服務器,形成客戶端和服務器之間的交互。具體的講,就是在主機終端模式中,把原來全部集中在主機部分的任務一分為二。一部分是仍然保留在主機上的負責集中處理和匯總運算,成為服務器;而另一部分是下放到終端的部分,主要負責為用戶提供友好的交互界面,稱為客戶機。相對于以前的模式,C/S模式最大的改
29、進是不再把所有軟件都裝進一臺計算機,而是把應用系統(tǒng)分成兩個不同的角色和兩個不同的地位,一般在運算能力較強的計算機上安裝服務器端程序,而在一般的PC上安裝客戶機程序,這樣就可以把主機端的一部分工作放在客戶機端完成,從而減輕了主機的負擔,也增加了系統(tǒng)對用戶的響應速度和響應能力,從而提高工作效率。這種模式的優(yōu)點充分利用了客戶機的性能,使計算能力大大提高;另外,由于客戶機和服務器之間的通訊是通過網絡協(xié)議進行的,是一種邏輯的聯(lián)系,因此在物理上客戶
30、機和服務器兩端是易于擴充的。</p><p> (3) 信息通信技術</p><p> 本系統(tǒng)實現(xiàn)信息通信主要是用Socket來實現(xiàn)的,Socket是網絡編程中最常見的客戶/服務器模式??梢韵胂笠粭l虛擬的電纜工作在兩臺計算機之間,兩臺計算機都有一個Socket,也就是端口,電纜插在兩臺計算機的Socket上,一臺計算機上的Socket同另一臺計算機通話創(chuàng)建一個通信信道,我們可以利用這個
31、信道在兩臺機器之間發(fā)送數(shù)據(jù)。用該模式編程時,服務器端有一個進程或多個進程在指定的端口等待客戶來連接,一旦連接成功,便按設計的數(shù)據(jù)交換方法和格式進行數(shù)據(jù)傳輸??蛻舳讼蚍掌鞫颂岢鲞B接請求,連接之后進行通信。</p><p> 1.4 本文工作及內容安排</p><p> 本文主要是通過java語言以及局域網實現(xiàn)一個QQ聊天系統(tǒng)。第一章介紹了論文的課題背景,闡述了課題的目的與意義,概述了項
32、目設計實現(xiàn)所要采用的一些關鍵技術;第二章對系統(tǒng)的需求進行分析,主要包括即時聊天消息的功能需求,即時消息的協(xié)議需求,即時信息加密和鑒別等通信息安全方面的需求;第三章介紹了系統(tǒng)設計,即時聊天系統(tǒng)的實施原理,軟件設計流程,功能模塊劃分;第四章介紹了數(shù)據(jù)庫的概要設計;第五章詳細設計,服務器端的設計與實現(xiàn),注冊處理模塊,客戶端的設計與實現(xiàn),以及聊天信息發(fā)送與接收;最后一章對本文所做的工作進行全面的總結,并指出了工作中的不足。</p>
33、<p> 第二章 系統(tǒng)的需求分析</p><p> 2.1 項目設計的需求描述</p><p> 設計一個基于JAVA的網絡即時通信系統(tǒng),在通用計算機網絡上實現(xiàn)信息傳遞,包括基本的文本消息傳遞,實時獲取聯(lián)系人狀態(tài),對常用聯(lián)系人進行管理等。主要考慮以下基本功能,注冊并登錄服務器,驗證用戶,獲得用戶列表,用戶運行客戶端程序后,服務器端程序在局域網上運行,與其他用戶進行點對點的
34、實時消息通信服務。</p><p> 2.2 服務器端需求</p><p> 處理用戶登錄,當用戶到達登陸界面時,用戶發(fā)送賬號、密碼等信息進行分裝,服務器接受到用戶發(fā)送的登陸賬號、密碼;驗證用戶登錄,服務器將用戶登陸發(fā)送的賬號和密碼,與數(shù)據(jù)庫中已有的用戶進行匹配,如果能能找到,那么就驗證成功,找不到該用戶,驗證失敗;處理用戶發(fā)送信息和處理用戶得到信息,用戶可以通過對話框和自己的好友進行
35、文字類的交流,可以發(fā)送消息,同時也可以接受好友消息;處理用戶退出,關閉服務器等。</p><p><b> 2.3客戶端需求</b></p><p> 用戶注冊界面及結果,可以將用戶的姓名、性別、年齡等信息分裝,添加到用戶數(shù)據(jù)表中,然后用戶可以根據(jù)注冊的賬號、密碼進行登錄;用戶登錄界面及結果,用戶進入登陸界面,填寫自己的賬號、密碼,然后將其提交給服務器;用戶驗證界
36、面及結果,根據(jù)服務器驗證的結果,驗證成功,用戶可以進入登陸成功界面,驗證失敗,用戶會得到一個登陸失敗界面;用戶發(fā)送信息界面及結果,用戶可以雙擊自己的好友,然后彈出一個對話框,可以和自己的好友進行交流;用戶得到信息界面及結果,當好友給自己發(fā)送消息時,用戶自己的好友界面端,好友頭像閃動,然后點擊好友頭像上,就可以接受到好友的消息。</p><p> 2.4 對于發(fā)送的消息的一些協(xié)議需求</p><
37、;p> 發(fā)送的消息必須至少使用一種消息格式,格式必須包含一個讓接收者可以回消息的地址、發(fā)信者和即時收件箱的標識,以及允許對信息有效負載的編碼和鑒別(非ASCII內容),而且即時消息格式必須提供擴展和注冊即時消息格式的模式機制。這種模式機制,可以保證即時消息成功投遞或者投遞失敗的時候,發(fā)信者獲得足夠的信息。即時通訊協(xié)議,是指參與的雙方或者多方通訊時所達到的共識。協(xié)議必須是雙方或者多方參與的,一方單獨完成的就不算協(xié)議。這樣在協(xié)議動作
38、的過程中,雙方必須交換信息,包括控制信息、狀態(tài)信息等等。這些信息的格式必須是協(xié)議參與方同意并且遵循的。好的協(xié)議要求清楚、完整,每一步都必須有明確的定義,并且不會引起誤解;對每種可能的情況必須規(guī)定具體的動作。本文的即時通訊協(xié)議必須提供方法保證即時消息的置信度,讓即時信息未被監(jiān)聽、破壞、重排序或者回放,同時還必須保證即時消息被正確的實體閱讀。</p><p><b> 第三章 系統(tǒng)設計</b>
39、</p><p> 3.1 軟件設計流程</p><p> 因為該系統(tǒng)其需求是十分明確的,所以該系統(tǒng)的開發(fā)流程采用瀑布模型進行設計,分為幾大步驟:先進行需求分析,再是系統(tǒng)設計,然后是詳細設計與編碼,其次是軟件的測試,最后是軟件的運行和維護。在實際過程中這些步驟經常是重疊和彼此間有信息交換,它不是一個簡單線性過程,而是包括開發(fā)步驟的多個反復。如圖1所示。</p><p
40、> 圖1 即時通訊系統(tǒng)開發(fā)瀑布圖</p><p> 3.2 即時聊天系統(tǒng)的實施原理</p><p> 3.2.1 工作方式和技術原理</p><p> 第一步,用戶輸入自己的用戶名和密碼登錄服務器,服務器通過讀取用戶數(shù)據(jù)庫來驗證用戶身份,如果驗證通過,登記用戶的IP地址、客戶的姓名及時間,然后返回用戶登錄成功的標志。</p><p&
41、gt; 第二步,根據(jù)用戶存儲在服務器上的好友列表,服務器將用戶在線的相關信息發(fā)送給也同時在線的好友的PC機,這些信息包括在線狀態(tài)、IP地址等,好友的客戶端收到此信息后將其顯示在客戶端界面上。</p><p> 第三步是服務器把用戶存儲在服務器上的好友列表及相關信息回送到他的客戶端機,這些信息包括也在線狀態(tài)、IP地址等信息。用戶應用流程圖如圖2所示。</p><p> 圖2 用戶體驗流
42、程圖</p><p> 3.2.2 通訊方式</p><p><b> (1)在線直接通訊</b></p><p> 如果用戶想與他的在線好友用戶聊天,他將直接通過服務器發(fā)送過來的用戶好友的IP地址、TCP端口號等信息,直接向用戶好友的PC機發(fā)出聊天信息,用戶好友的客戶端軟件收到后,頭像閃動,雙擊彈出對話框,顯示在屏幕上,然后用戶好友再直
43、接回復到用戶的PC機,這樣雙方的即時文字消息就不在服務器中轉,而是直接通過網絡進行點對點的通訊。</p><p><b> (2)在線代理通訊</b></p><p> 用戶與用戶好友的點對點通訊由于防火墻、網絡速度等原因難以建立或者速度很慢,服務器將會主動提供消息中轉服務,即用戶和用戶好友的即時消息全部先發(fā)送到服務器,再由服務器轉發(fā)給對方。</p>
44、<p> 3.3 功能模塊劃分</p><p> 3.3.1 服務器端</p><p> 服務器端完成至少3大功能:建立連接、存儲數(shù)據(jù)和監(jiān)聽客戶。這3大功能的具體含義如下:</p><p> (1)建立一個ServerSocket連接,不斷偵聽是否有客戶端連接或者斷開連接。</p><p> (2)服務器端是一個信息發(fā)送
45、中心,所有客戶端的信息都傳到服務器端,再由服務器根據(jù)要求分發(fā)出去。</p><p> (3)數(shù)據(jù)庫數(shù)據(jù)操作包括將用戶信息存儲到數(shù)據(jù)庫等。</p><p> 服務器端功能結構如圖3。</p><p> 圖3 服務器端功能結構圖</p><p><b> 3.3.2 客戶端</b></p><p&
46、gt; 客戶端要完:用戶登錄、讀取用戶、通信交流這些功能。這些功能的含義如下:</p><p> (1)用戶登錄:客戶端與服務器端建立通信信道,向服務器端發(fā)送信息,完成用戶登錄。</p><p> (2)通信交流:客戶端可完成的信息的編輯、發(fā)送和接收等功能。該即時聊天工具按如下過程完成通信,客戶向服務器登陸,告知服務器該客戶監(jiān)聽某主題;客戶登陸之后,向服務器發(fā)送消息;服務器再把消息發(fā)
47、送給所有監(jiān)聽此主題的客戶。</p><p> 客戶端功能模塊結構如圖4</p><p> 圖4客戶端功能模塊圖</p><p> 第四章 數(shù)據(jù)庫概要設計</p><p> 4.1 系統(tǒng)實體及實體關系圖</p><p> 經過本人對系統(tǒng)數(shù)據(jù)信息的分析,設計了有用戶實體、好友列表實體兩個實體。用戶實體屬性包括了用
48、戶編號、昵稱、密碼、簽名、性別、生日、在線頭像、離線頭像、消息頭像等;好友列表實體包括了功能ID、用戶編號、好友編號等屬性。用戶好友實體和好友列表實體E-R圖如圖5。</p><p><b> 圖5 實體關系圖</b></p><p> 根據(jù)實體關之間系,數(shù)據(jù)庫設計了用戶表(登錄用戶)、好友表(friends),另外為了方便編寫用戶的登陸狀態(tài)和直觀的表示服務器端,
49、又添加了在線狀態(tài)表(logtype)和登陸表。用的數(shù)據(jù)庫是oracle10,對數(shù)據(jù)庫表進行操作的軟件工具是PLSQL Developer,下面將對這五張表進行詳細說明。</p><p><b> 4.2 用戶表</b></p><p> 用戶表主要是記錄每個用戶自己的信息,包括自己的qq號、昵稱、密碼、簽名、性別、生日、在線頭像、離線頭像、消息頭像等這些字段。其中
50、qqnum和qqsex為數(shù)字類型,qqname、qqpass、qqdesc為字符串類型,而在線頭像、離線頭像、消息頭像是大數(shù)據(jù)類型,生日是日期類型,主鍵是qqnum。主鍵為了標識一條記錄的唯一性,保證每條記錄應當具備惟一性,一張表里只有一個主鍵,而且主鍵不能為空,如表1。</p><p><b> 表1 用戶信息表</b></p><p> 4.3 好友表(fri
51、ends)</p><p> 好友表主要反應的是該qq好友和好友之間的關系。friid、qqnum、frinum都是數(shù)字類型的。其中friid是主鍵,qqnum是外鍵。外鍵表示了兩個關系之間的聯(lián)系。以另一個關系的外鍵作主關鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。外鍵又稱作外關鍵字。主鍵與外鍵用于區(qū)分不同的記錄便于查詢。外鍵又稱作外關鍵字。一張表中可以有多個外鍵,但這些外鍵必須是其它表的主鍵,如表2。
52、</p><p><b> 表2 好友表</b></p><p> 4.4 在線狀態(tài)表(logtype)</p><p> 在線狀態(tài)表主要是反應用戶的登陸狀態(tài)的表。Typeid是數(shù)字類型,typename、typedesc是字符串類型。其中初始化數(shù)據(jù)時,10代表離線,11代表隱身,12代表在線,如表3。</p><p&
53、gt;<b> 表3 在線狀態(tài)表</b></p><p><b> 4.5 登陸表</b></p><p> 登陸表主要是將登陸的用戶信息反映到服務器端,服務器端顯示每個登陸的用戶信息。其中qqnum、typeid是字符類型的,logip是字符串類型的,logtime是日期類型的,而且qqnum即時這張表的主鍵,也是這張表的外鍵,同時typ
54、eid也是這張表的外鍵,如表4。</p><p> 表4 服務器端登陸表</p><p><b> 4.6 離線信息表</b></p><p> 離線表主要是方便用戶不在線時,將離線信息存儲在這個表中,當用戶登錄時,將信息顯示給用戶。其中ID是number類型的,fromuserid、touserid、message是字符串類型的,同時編
55、號ID是這張表的主鍵。如表5。</p><p><b> 表5 離線信息表</b></p><p><b> 第五章 詳細設計</b></p><p> 5.1 服務器端的設計與實現(xiàn)</p><p> C/S模式下的系統(tǒng)開發(fā),很顯然服務器端程序的設計是非常重要的。下面就服務器端的相關程序模塊
56、進行設計,并一定程度上實現(xiàn)了相關功能。使用SeverSocket s=newServerSocket(端口)語句在端口創(chuàng)建套接口;使用new ServerThread(socket)語句創(chuàng)建新的線程。服務器類調用ServerThread類,而每個ServerThread實體就是一個獨立的線程,剛好對應于客戶端的連接請求響應線程。每一個客戶登陸,如果驗證成功,將會顯示在服務器端。為了更好的顯示后臺服務器端,設計了相應的服務器端圖形界面,如
57、圖6。</p><p><b> 圖6 服務器端界面</b></p><p> 當服務器打開時會同時監(jiān)聽登陸線程(LoginListener)類、監(jiān)聽消息線程(MesListener)類這三個線程。</p><p> 登陸線程(LoginListener)類主要是負責服務器的用戶登陸顯示、發(fā)送給登陸用戶好友列表、發(fā)送給登陸用戶其在線好友,
58、通知上線信息等。</p><p> 在服務器的登錄表注冊登錄,并更新登陸顯示的主要代碼為:</p><p> win.getDao().addLoginUser(lm);</p><p> win.setTmodel(win.getDao().getLoginModel());</p><p> win.getTab().setMod
59、el(win.getTmodel());</p><p> 發(fā)送給登陸用戶好友列表的主要代碼為:</p><p> ArrayList<FriendModel> friList=win.getDao().getFriendsList(lm.getQqnum());</p><p> SendModel.sendFriList(lm, friList
60、);</p><p><b> 發(fā)送給登陸用戶留言</b></p><p> MesModel mm=win.getDao().getmesModelByID(lm.getQqnum());</p><p> if(mm!=null){</p><p> SendModel.sendMes(mm, lm.getQ
61、qip(), FinalFile.CLI_MES_PORT);</p><p> win.getDao().deleteMes(lm.getQqnum());</p><p><b> }</b></p><p> 5.2 用戶注冊模塊</p><p> 當用戶使用Client界面,點擊注冊賬號,用戶要把個人資料
62、填寫完,此時有一個注冊類線程開啟,同時驗證用戶填寫的個人資料是否合法。如果合法,將注冊的信息插入到用戶表用戶中,同時還會將申請的賬號返回給用戶,用戶可以通過這個賬號和自己注冊的密碼進行登錄。如果不合法,系統(tǒng)拒絕申請,返回到登陸界面。注冊模塊圖如圖7。</p><p> 圖7 用戶注冊模塊圖</p><p> 注冊好友的方法如下所示。</p><p> publ
63、ic void LoginId( String qqname,String qqpass,String qqdesc,int qqsex,String qqbirthday){</p><p> String sql="insert into qquser values(sq_user.nextval, '"+qqname+"','"+qqpass
64、+"','"+qqdesc+"','"+qqsex+"',"+"to_date( '"+qqbirthday+ "' ,'yyyy-mm-dd'),null,null,null)";</p><p> dbutil.executeDML(sq
65、l);</p><p><b> }</b></p><p><b> 5.3 登陸模塊</b></p><p> 5.3.1登錄模型圖</p><p> 當用戶使用賬號和密碼進行登錄,這時候有一個登錄線程將用戶發(fā)過來的用戶信息和后臺數(shù)據(jù)庫里的用戶信息進行比對。如果用戶的賬號和密碼與之完全匹
66、配,則用戶成功登錄,并且返回給用戶登錄賬號的好友列表、好友資料、好友狀態(tài)。如果不匹配,服務器則告知登陸的用戶登錄失敗。用戶登錄活動圖8。</p><p><b> 圖8 登陸模型圖</b></p><p><b> 5.3.2登錄驗證</b></p><p> 利用JFrame類寫一個登陸界面類(ClientFram
67、e),在登陸界面類給所有的按鈕添加監(jiān)聽事件類(LoginFrameHandler)。點擊登陸進入驗證登陸環(huán)節(jié),將登陸界面獲取的登陸賬號、密碼、狀態(tài)全部用一個登陸用戶類(LoginModel)分裝起來,然后寫一個方法,根據(jù)獲取的賬號和密碼,從數(shù)據(jù)庫中查找,如果能找到,那么說明有這個用戶,用戶進入登陸成功,顯示好友界面這一環(huán)節(jié);如果根據(jù)賬號和密碼,從數(shù)據(jù)庫中找不到該用戶,那么說明密碼和賬號有問題,這時提示輸入密碼和賬號有問題,請關閉當前提示
68、,請重新登陸。</p><p> 實現(xiàn)驗證登陸功能方法的代碼如下。</p><p> public boolean isEnter(LoginModel lm){</p><p> String sql="select qqnum from qquser where qqnum="+lm.getQqnum()+" and qqpa
69、ss='"+lm.getQqpass()+"'";</p><p> dbutil.setSet(dbutil.executeQuary(sql));</p><p><b> try {</b></p><p> if(dbutil.getSet().next()){</p>
70、<p> return true;</p><p><b> }</b></p><p> } catch (SQLException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();<
71、/p><p> } finally{</p><p> dbutil.closeAll();</p><p><b> }</b></p><p> return false;</p><p><b> }</b></p><p> 發(fā)送登陸信
72、息的代碼方法如下。</p><p> public static void sendLogin(LoginModel lm) {</p><p><b> try {</b></p><p> socket=newSocket(FinalFile.SER_IP, FinalFile.SER_LOGIN_PORT);</p>
73、<p> objout = new ObjectOutputStream(socket.getOutputStream());</p><p> objout.writeObject(lm);</p><p> } catch (UnknownHostException e) {</p><p> // TODO Auto-generated ca
74、tch block</p><p> e.printStackTrace();</p><p> } catch (IOException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p>
75、; } finally {</p><p> closeAll();</p><p><b> }</b></p><p><b> }</b></p><p> 如果上面的驗證登陸成功后,那么就進入登陸成功這一環(huán)節(jié),此時用JFrame類寫一個客戶端好友界面(ClientFrame),在這
76、個好友界面里添加好友模型(FriendPanel),獲取頭像、姓名、簽名。并在好友界面里添加監(jiān)聽好友模型線程類(FriListListener)、好友狀態(tài)改變線程類(ChangeFriTypeListener)、以及消息線程(MesListener)。好友模型線程是為了獲取好友的信息;好友狀態(tài)改變線程是為了監(jiān)聽好友的裝太多改變;消息線程是為了獲取好友的消息。</p><p> 好友模型線程(FriListLis
77、tener)類主要是顯示好友列表到界面、并刷新好友列表界面等功能。實現(xiàn)這一功能的主要代碼如下所示。</p><p> ArrayList<FriendModel>friList=(ArrayList<FriendModel>)</p><p> objin.readObject();</p><p> win.getFrisPanel(
78、).setFrisView(friList);</p><p> win.getFrisPanel().repaint();</p><p> win.getContentPane().repaint();</p><p> win.validate();</p><p> 好友狀態(tài)改變線程類(ChangeFriTypeListene
79、r)類,主要是將該邊狀態(tài)的好友重新顯示在好友列表客戶端,并對改變了的好友不斷的刷新,這部分功能代碼如下。</p><p> LogUnLogModel cm=(LogUnLogModel)objin.readObject();</p><p> ArrayList<FriendPanel> fpList=win.getFrisPanel().getFriPanList();
80、</p><p> for (FriendPanel friendPanel : fpList) { if(friendPanel.getFriModel().getQqnum()==cm.getChangeQqnum())</p><p> { friendPanel.getFriModel().setLogtype(cm.getLogType());</p
81、><p> friendPanel.getPicLab().setIcon(friendPanel.getImage());</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>&
82、lt;p> 5.4 添加好友、刪除好友、修改個人資料模塊</p><p> 用戶點擊添加好友按鈕,這時會彈出一個添加好友畫面,用戶把自己要添加的好友寫入到文本框里,客戶端將其封裝,然后交給服務器,將好友添加到好友表里,同時刷新客戶端界面,可以實現(xiàn)添加好友。刪除好友,將刪除的好友獲取后,從好友表中刪除,同時刷新界面即可。修改個人資料,是將自己的新昵稱、新簽名、新密碼獲取,然后在用戶表中更新,同時刷新客戶端
83、界面,便可實現(xiàn)設置個人信息。</p><p> 添加好友的主要代碼為:</p><p> public void addFriend(int num1,int num2){</p><p> String sql="insert into friends values(sq_fir.nextval, " +num1+ ",&quo
84、t; +num2+ ")";</p><p> dbutil.executeDML(sql);</p><p><b> }</b></p><p> 刪除好友的主要代碼為:</p><p> public void deleteFri(int num1,int num2){</p>
85、;<p> String sql="delete from friends where qqnum="+num1+"and frinum="+num2;</p><p> dbutil.executeDML(sql);</p><p><b> }</b></p><p> 修改個人
86、資料的代碼為:</p><p> public void updateInfo(String name,int num,String desc ,String pass){</p><p> String sql1="update qquser set qqdesc='"+desc+"' where qqnum="+num ;&l
87、t;/p><p> dbutil.executeDML(sql1);</p><p> String sql="update qquser set qqpass='"+pass+"' where qqnum="+num ;</p><p> dbutil.executeDML(sql);</p>
88、<p> String sql2="update qquser set qqname='"+name+"'where qqnum="+num ;</p><p> dbutil.executeDML(sql2);</p><p><b> }</b></p><p>
89、5.5 發(fā)送和接收消息模塊</p><p> 5.5.1 聊天流程</p><p> 用戶登錄成功后,雙擊好友,打開聊天面板,并填寫聊天內容。消息先是由用戶發(fā)送給服務器,然后由服務器轉發(fā)給好友,在這里是有服務器獲取到好友的ip,然后服務器將分裝好的消息發(fā)送給這個ip和這個端口的好友,頭像閃通,好友通過接收消息的端口接收消息,就可以實現(xiàn)兩個用戶之間的聊天。聊天流程圖如圖9。</p&
90、gt;<p><b> 圖9 聊天流程圖</b></p><p> 5.5.2發(fā)送和接收消息</p><p> 登陸成功后,對每一個(FriendPanel)添加雙擊事件類(DoubleClickHandler), 雙擊對方頭像后,將會出現(xiàn)和對方的一個對話框類(SessionFrame),并對此類的按鈕添加一些監(jiān)聽事件,通過這個點擊獲取到對方的信息
91、。發(fā)送消息主要是通過socket=new Socket(ip,port),將一個消息發(fā)送給這個ip和端口的好友。當然在此之前還要判斷好友是否在線,如果在線,雙擊這個頭像,彈出對話框。</p><p> 寫一個類(MesListener)用來接收消息,但這里必需用一個相同的端口接收消息,同時也是將接收到的消息轉換成文字流。這個時候先判斷這個消息對話框是否打開,如果這個會話框是打開的,那么顯示消息,顯示消息主要是將
92、回話框里的文本文檔用append添加進來。如果這個回話框沒有打開,那么必須先閃動頭像,把消息加入消息列表。</p><p> 發(fā)送消息的方法代碼為:</p><p> public static void sendMes(MesModel mes, String ip, int port) {</p><p><b> try {</b>
93、</p><p> socket = new Socket(ip, port);</p><p> objout = new ObjectOutputStream(socket.getOutputStream());</p><p> objout.writeObject(mes);</p><p> } catch (Unknown
94、HostException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> } catch (IOException e) {</p><p> // TODO Auto-generated catch bl
95、ock</p><p> e.printStackTrace();</p><p> } finally {</p><p> closeAll();</p><p><b> }</b></p><p><b> }</b></p><p>
96、; 客戶端檢查消息對話框是否打開、以及將消息加入消息列表的主要代碼如下。</p><p> MesModel mes = (MesModel) objin.readObject();</p><p> int friQQnum=mes.getQqnum();</p><p> for(FriendPanel fp : win.getFrisPanel().g
97、etFriPanList()){</p><p> if(fp.getFriModel().getQqnum()==friQQnum){</p><p> if(fp.getSession().isVisible()){</p><p> fp.getSession().getJtaG().append(MesUtil.getMesInfo(mes,
98、 fp.getFriModel().getQqname()));}</p><p> else{fp.getFsPane().getMesList().add(mes);</p><p> fp.setMesPic();</p><p><b> }</b></p><p><b> br
99、eak;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 5.6 關閉客戶端</b></p><p> 用戶點擊自己的客戶端上的關閉按鈕,此時需通知服務器下線,然后服務刪除該用戶,同時在服務器端,
100、重新顯示在線用戶,并發(fā)送給登陸用戶其在線好友,通知下線信息,即時刷新界面。關閉客戶端流程圖10。</p><p><b> 圖10 關閉客戶端</b></p><p> 刪除登陸用戶代碼的主要方法為:</p><p> public void unLoginUser(int qqnum) {</p><p> S
101、tring sql = "delete login where qqnum=" + qqnum;</p><p> dbutil.executeDML(sql);</p><p><b> }</b></p><p><b> 第六章 系統(tǒng)測試</b></p><p>
102、6.1 系統(tǒng)測試案例</p><p> 為了檢測最總系統(tǒng)的效果,本文運用的是MyElipse 8.5軟件來進行測試。在這里我先自己注冊一個賬號,查看注冊功能是否成功,然后我用錯誤的賬號和已注冊的注冊的賬號分別進行登錄來進行驗證,去分別查看登錄失敗效果圖,登錄成功圖,以及雙擊好友,和好友聊天等功能的實現(xiàn)。</p><p> 6.2 測試結果和分析</p><p>
103、 運行程序,進入客戶端登錄界面如圖11。</p><p> 圖11 客戶端登錄界面圖</p><p> 點擊注冊按鈕,就如注冊界面,得到的注冊效果圖如圖12:</p><p><b> 圖12 注冊效果圖</b></p><p> 注冊成功后,得到的申請賬號成功界面如圖13:</p><p&
104、gt; 圖13 申請賬號成功界面圖</p><p> 用一個錯誤的賬號或者密碼分別輸入到賬號、密碼中進行登錄驗證,這時應該顯示密碼和賬號錯誤,得到的提示如圖14。</p><p><b> 圖14 登錄錯誤圖</b></p><p> 然后再用一個正確的賬號、密碼進行登錄,進行驗證,顯示登錄成功好友界面。在這個好友界面里添加好友模型(F
105、riendPanel),獲取頭像、姓名、簽名等??蛻舳撕糜呀缑嫒鐖D15。</p><p><b> 圖15 好友界面圖</b></p><p> 然后雙擊自己的好友聊天,在這里比如雙擊自己的好友楊飛,會彈出和自己好友聊天的界面,在這個界面包括了,聊天的好友名稱、時間以及對話內容,好友聊天圖如圖16</p><p><b> 圖1
106、6 好友聊天圖</b></p><p><b> 第七章 總結與展望</b></p><p> 隨著科學技術的發(fā)展,即時通信系統(tǒng)已經越來越重要,所以我很高興的選擇了這樣一個畢業(yè)設計。系統(tǒng)著重研究并實現(xiàn)了網絡應用的部分。根據(jù)實現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網絡通信效果。生成的聊天室可以達到基本的聊天要求,具有較高的研究價值。當然,該
107、課題討論的即時通訊系統(tǒng)是定位于內部局域網,供小團體內部人員使用的通訊系統(tǒng)。</p><p> 即時通信中最基本的功能就是通過計算機之間的文本數(shù)據(jù)的互換的形式實現(xiàn)思想的交流和溝通,它的優(yōu)點是方便快捷,為人們之間創(chuàng)建了一種新型的、廉價的、快速的、簡便的溝通方式。</p><p> 首先,本系統(tǒng)完全按照軟件工程的瀑布模型進行開發(fā),是按照需求分析,概要設計,詳細設計,軟件的運行和測試等的結構進
108、行安排的。</p><p> 其次,即時聊天系統(tǒng)采用了C/S模型。服務器在C/S模型中處于一個中心地位。服務器一般同時為多個客戶提供服務,這就造成了服務器設計的復雜性。即時通訊服務器是數(shù)據(jù)中心,它是客戶活動的中介,需要同時應對眾多客戶的請求。</p><p> 經過一段時間的學習和工作,該即時聊天系統(tǒng)已經實現(xiàn)了網絡即時通信工具的主要功能,為實現(xiàn)一個嶄新的可跨平臺的Java即時聊天工具打
109、下了基礎。</p><p><b> 參考文獻</b></p><p> [1] 尹治本.計算機網絡及應用教程[M].成都:西南交通大學出版社.2002.8. </p><p> [2]熊曉敏,劉瑛,陳惠清.基于Java的網絡即時通訊系統(tǒng)的設計與實現(xiàn)[J].計算機與現(xiàn)代化,2005(12): 89-92. </p><
110、p> [3] 羅軍舟,黎波濤,楊明,吳俊,黃健.TCP/IP協(xié)議及網絡編程技術.北京:清華大學出版社.2005.8. </p><p> [4] Bruce Eckel著,侯捷翻譯.Java編程思想[M].北京:機械工業(yè)出版社出版,2000.9. </p><p> [5] 京麗等.數(shù)據(jù)通信原理[M].北京:北京郵電大學出版社.2002.2. </p><p
111、> [6] 張虹.軟件工程與軟件開發(fā)工具[M].北京:清華大學出版社.2004. </p><p> [7] BrueeEekel.ThinkingInJava(第三版)[M].北京:機械工業(yè)出版社.2005.</p><p> [8] Swing:David M.Geary著.Java圖形設計卷二[M].Prentice Hall/Pearson.2000.2.1. <
112、/p><p><b> 致 謝</b></p><p> 在論文完成之際,我首先向關心幫助和指導我的指導老師王克剛表示真誠感謝并致以崇高的敬意!</p><p> 在學校的學習生活快要結束了,回顧四年來的學習經歷,面對現(xiàn)在的收獲,我感到無限欣慰。為此,我向所有老師和同學表示由衷的感謝!在論文工作中,遇到了許許多多這樣那樣的問題,有的是專業(yè)上
113、的問題,有的是論文格式上的問題,但是王老師的親切關懷和悉心指導,使我的論文可以又快又好的完成,王老師以其淵博的學識、嚴謹?shù)闹螌W態(tài)度、求實的工作作風和他敏捷的思維給我留下了深刻的印象,我將終生難忘我的王老師對我的親切關懷和悉心指導,再一次向他表示衷心的感謝,感謝他為學生營造的濃郁學術氛圍,以及學習、生活上的無私幫助! 值此論文完成之際,謹向王老師致以最崇高的謝意!最后,衷心地感謝在百忙之中評閱論文和參加答辯的各位專家、教授!</p&
114、gt;<p><b> 附 件 </b></p><p> package com.dsh.mode.dao;</p><p> import java.io.File;</p><p> import java.io.FileInputStream;</p><p> import jav
115、a.io.FileNotFoundException;</p><p> import java.io.IOException;</p><p> import java.sql.ResultSetMetaData;</p><p> import java.sql.SQLException;</p><p> import java
116、.util.ArrayList;</p><p> import java.util.Vector;</p><p> import javax.swing.table.DefaultTableModel;</p><p> import com.dsh.model.FriendModel;</p><p> import com.d
117、sh.model.LogUnLogModel;</p><p> import com.dsh.model.LoginModel;</p><p> import com.dsh.model.MesModel;</p><p> import com.dsh.model.vo.LoginVO;</p><p> import com.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文--基于java的即時通信軟件設計與實現(xiàn)
- 基于java的即時通訊軟件設計與實現(xiàn)
- 基于c#的即時通訊軟件設計與實現(xiàn)畢業(yè)論文
- 局域網即時通訊軟件設計與實現(xiàn)畢業(yè)論文
- 基于java的android即時通訊軟件畢業(yè)論文
- 基于bs模式的即時通信軟件設計
- 局域網即時通信軟件畢業(yè)論文
- Symbian OS環(huán)境中即時通信軟件設計與實現(xiàn).pdf
- 畢業(yè)設計---局域網即時通信軟件設計
- 畢業(yè)論文---基于j2se的即時通信軟件
- 即時通信工具畢業(yè)論文
- 畢業(yè)論文——基于bs方式的即時通訊軟件的設計與實現(xiàn)
- 基于Java的即時通訊軟件的設計與實現(xiàn).pdf
- 基于bs方式的即時通訊軟件的設計與實現(xiàn)——畢業(yè)論文
- 基于bs方式的即時通訊軟件的設計與實現(xiàn)——畢業(yè)論文
- 基于Android平臺的即時通信系統(tǒng)的客戶端軟件設計與實現(xiàn).pdf
- 基于Linux的網絡即時通訊軟件設計與實現(xiàn).pdf
- 基于qt的局域網跨平臺即時通信軟件 畢業(yè)論文
- 畢業(yè)論文 基于java即時聊天系統(tǒng)的設計與實現(xiàn)
- 基于java的網絡即時通訊軟件的設計和實現(xiàn)
評論
0/150
提交評論