版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、畢業(yè)設計設計題目: 學生姓名: 學院名稱: 專業(yè)名稱: 班級名稱: 學 號: 指導教師: 教師職稱: 學 歷: 目 錄1 前言51.1 課題選題背景51.2需求分析51.3系統(tǒng)設計的要點62 涉及的相關技術及協(xié)議62.1 Java語言62.2 C/S模式介紹73 系統(tǒng)需求分析83.1可行性分析83.2 系統(tǒng)功能需求83.3 系統(tǒng)性能需求83.4 即時信息加密和鑒別93.5 即時通訊系統(tǒng)需求94 系統(tǒng)設計94.1即時聊天系統(tǒng)的實施原理104.2軟件設計流程114.3功能模塊劃分114.4 數(shù)據(jù)庫概要設計125 詳細設計135.1 服務器端的設計與實現(xiàn)135.1.2 主服務器類的設計135.1.2
2、 登錄驗證模塊155.1.3 注冊處理模塊155.2 客戶端的設計與實現(xiàn)165.2.1 用戶注冊模塊165.2.2 用戶登錄175.2.3 在線用戶顯示設計185.2.4 聊天信息發(fā)送與接收195.3 數(shù)據(jù)庫設計206 結論21致謝23參考文獻24附錄25基于Java即時聊天系統(tǒng)的設計與實現(xiàn)摘要: 網(wǎng)絡絡聊天工具已經(jīng)作為一種重要的信息交流工具,受到越來越多的網(wǎng)民的青睞。目前,出現(xiàn)了很多非常不錯的聊天工具,其中應用比較廣泛的有Netmeeting、騰訊QQ、MSN-Messager等等。該系統(tǒng)開發(fā)主要包括一個網(wǎng)絡聊天服務器程序和一個網(wǎng)絡聊天客戶程序兩個方面。前者通過Socket套接字建立服務器,
3、服務器能讀取、轉發(fā)客戶端發(fā)來信息,并能刷新用戶列表。后者通過與服務器建立連接,來進行客戶端與客戶端的信息交流。其中用到了局域網(wǎng)通信機制的原理,通過直接繼承Thread類來建立多線程。開發(fā)中利用了計算機網(wǎng)絡編程的基本理論知識,如TCP/IP協(xié)議、客戶端/服務器端模式(Client/Server模式)、網(wǎng)絡編程的設計方法等。在網(wǎng)絡編程中對信息的讀取、發(fā)送,是利用流來實現(xiàn)信息的交換,其中介紹了對實現(xiàn)一個系統(tǒng)的信息流的分析,包含了一些基本的軟件工程的方法。經(jīng)過分析這些情況,該聊天工具采用Eclipse為基本開發(fā)環(huán)境和java語言進行編寫,首先可在短時間內建立系統(tǒng)應用原型,然后,對初始原型系統(tǒng)進行不斷修
4、正和改進,直到形成可行系統(tǒng)關鍵詞:即時通訊系統(tǒng) B/S C/S MySQL Socket SwingAbstract: The rapid development of computer network technology today, more immediate means of communication by people of all ages. Real-time chat tool in achieving the transmission of video and audio i
5、nformation, so that members can collaborate remotely intuitive, real audio and visual communication at the same time, use of multimedia technology, it can also help users to work in all kinds of information processing. Study of this issue is to support the exchange of internal network systems - netw
6、ork instant messaging system. The system uses Java programming language. System uses the C / S structure mode, support for LAN and Internet. The system uses the waterfall model of software development projects were discussed system requirements analysis, outline design, detailed design and coding, a
7、nd run and test the whole system. Finally, the paper concluded. Keywords:Instant Messager; System; B/S C/S MYSQL Socket Swing1 前言目前國內外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳瑯滿目,國內有諸如騰訊QQ、新浪UC、網(wǎng)易泡泡等,國外有著名的MSN(新版改名為Live Messenger)以及跨平臺Gaim等。本人取最具代表性的QQ和MSN進行了一些研究,作為我開發(fā)聊天系統(tǒng)的準備。1.1 課題選題背景隨著計算機網(wǎng)絡技術的發(fā)展,網(wǎng)絡聊天工具已經(jīng)成為人們日常交流的一種重要工具。它通
8、信速度快,成本低,更重要的是方便人們信息的交流和資料的傳遞,所以開發(fā)一個易于操作并擁有友好界面的聊天工具可以較好地解決現(xiàn)實生活中通信費用高昂以及電話的單線程通信等問題1。QQ聊天系統(tǒng)是一款基于互聯(lián)網(wǎng)的即時通信系統(tǒng),它允許人們利用英特網(wǎng)技術實時地傳送信息,并且能讓用戶選擇性地接受或拒絕其他用戶的信息。由于QQ有著出色的通信性能并且其用戶普及度較高,因此本課題在模仿QQ的前提下,設計了一款具有聊天功能及其他附加功能的軟件目前即時聊天系統(tǒng)種類眾多,功能也較為齊全。該課題現(xiàn)在所研究的即時通訊系統(tǒng),其目標是定位于企業(yè)內部網(wǎng)絡,解決企業(yè)或單位的溝通及協(xié)同的問題,提高工作效率。企業(yè)內部員工可以利用該通訊系統(tǒng)
9、隨時隨地發(fā)送文字消息、進行多人群聊、消息群發(fā)、傳送文件、音頻視頻對話等。系統(tǒng)包括客戶端程序和服務器端程序,支持局域網(wǎng)和Internet。企業(yè)內部員工之間可以在內部網(wǎng)覆蓋的任何地點、任何時間進行即時交流,真正實現(xiàn)企業(yè)內部協(xié)同工作。使您不必花費大量的時間、金錢聚集到一個地方,通過網(wǎng)絡,就能實現(xiàn)面對面的溝通,提高了效率。MSN、QQ等公共消息系統(tǒng),由于聊天對象及內容的不可控,若在企業(yè)內部使用,可能會降低工作效率。而該即時通訊系統(tǒng)將自己的服務器端安裝在企業(yè)內,并且人員的創(chuàng)建是由系統(tǒng)管理員來完成,因此很好的解決了這個問題。隨著計算機網(wǎng)絡技術的發(fā)展,網(wǎng)絡聊天工具已經(jīng)成為人們日常交流的一種重要工具。它通信速
10、度快,成本低,更重要的是方便人們信息的交流和資料的傳遞,所以開發(fā)一個易于操作并擁有友好界面的聊天工具可以較好地解決現(xiàn)實生活中通信費用高昂以及電話的單線程通信等問題1。QQ聊天系統(tǒng)是一款基于互聯(lián)網(wǎng)的即時通信系統(tǒng),它允許人們利用英特網(wǎng)技術實時地傳送信息,并且能讓用戶選擇性地接受或拒絕其他用戶的信息。由于QQ有著出色的通信性能并且其用戶普及度較高,因此本課題在模仿QQ的前提下,設計了一款具有聊天功能及其他附加功能的軟件1.2需求分析聊天系統(tǒng)最重要的是服務器端和客戶端兩個方面。服務器端有兩個主要任務:(1)服務器端應當建立一個ServerSocket,并且不斷進行監(jiān)聽,判斷是否有客戶端連接請求或斷開連
11、接。(2)服務器端應當是一個信息發(fā)送中心,所有客戶端的信息都傳到服務器端,由服務器端根據(jù)要求分發(fā)信息給客戶端。客戶端要完成的工作:(1)與服務器端建立通信通道,向服務器端發(fā)送信息。(2)接收來自服務器的應答信息。解決了上述的4個問題,也就完成了聊天系統(tǒng)的核心任務。1.3系統(tǒng)設計要點聊天系統(tǒng)的設計主要是提供滿足用戶雙方直接進行實時聊天的服務,在設計聊天系統(tǒng)的過程中,必須要考慮好以下幾個設計要點:(1)實現(xiàn)思想在Internet上的聊天程序一般都是以服務器提供服務端連接響應,用戶通過客戶端程序登錄到特定服務器,即可與登錄在同一服務器上的用戶進行交流,這是一個面向連接的通信過程。因此,要在TCP/I
12、P環(huán)境下4-5,實現(xiàn)服務器端和客戶端兩部分程序。(2)服務器端工作流程服務器端通過socket()系統(tǒng)創(chuàng)建一個ServerSocket來對客戶端進行接收,并與指定的本地端口綁定bind(),就可以在端口進行監(jiān)聽listen()。Map<String,socket>用以存儲用戶姓名和對應的Socket。通過ChatRoomServerThread線程類來處理不同請求。如果有客戶端連接請求,則給出一個相應的Socket,將客戶端地址賦給這個Socket。登錄成功的用戶就可以在服務器上聊天。(3)客戶端工作流程客戶端程序相對簡單,只需要建立一個Socket與服務器端連接,成功后通過這個S
13、ocket來發(fā)送和接收數(shù)據(jù)即可。2 涉及的相關技術及協(xié)議為了保證課題能正常實施,先來分析一下課題所需要的相關技術和協(xié)議。2.1 Java語言經(jīng)過認真的討論分析,綜合各種計算機高級語言的特征和適應范圍,最終決定選擇純面向對象的Java語言來完成畢業(yè)論文的設計,下面就技術可行性方面,對Java語言作一簡要介紹。Sun公司的口號就是“網(wǎng)絡就是計算機”,Java能使所有東西從桌面計算平穩(wěn)的轉變?yōu)榛诰W(wǎng)絡的計算,它是專門為此而建立的,并顯然是為了完成這個任務而來的。使用Java語言,可以相對輕松的一天編寫一個有條理的網(wǎng)絡程序。今天,Java的網(wǎng)絡功能正在飛躍發(fā)展,不斷有新的特性增加到這個有價值的基礎上,
14、JavaSoft實驗室正在不斷努力使Java更加完善。就Java語言的主要特點,本人歸納如下:Java程序設計的開發(fā)過程與運行環(huán)境Java是解釋型的高級編程語言,所以Java程序的開發(fā)通常需要經(jīng)過編寫源程序、編譯生成字節(jié)碼和運行三個過程。這里要提到,Java應用程序的開發(fā)周期包括編譯、下載、解釋和執(zhí)行幾個部分。Java編譯程序將Java源程序翻譯為JVM可執(zhí)行代碼字節(jié)碼。這一編譯過程同C/C+的編譯有些不同。當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平臺運行而產(chǎn)生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。Java編譯器卻
15、不將對變量和方法的引用編譯為數(shù)值引用,也不確定程序執(zhí)行過程中的內存布局,而是將這些符號引用信息保留在字節(jié)碼中,由解釋器在運行過程中創(chuàng)立內存布局,然后再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性?!?】2.2 C/S模式介紹20世紀90年代出現(xiàn)并迅速占據(jù)主導地位的一種計算模式為客戶機/服務器模式,簡稱為C/S模式,它實際上就是把主機終端模式中原來全部集中在主機部分的任務一分為二,保留在主機上的部分負責集中處理和匯總運算,成為服務器;而下放到終端的部分負責為用戶提供友好的交互界面,稱為客戶機?!?】相對于以前的模式,C/S模式最大的改進是不再把所有軟件都裝進一臺
16、計算機,而是把應用系統(tǒng)分成兩個不同的角色和兩個不同的地位:一般在運算能力較強的計算機上安裝服務器端程序,而在一般的PC上安裝客戶機程序。正是由于個人PC機的出現(xiàn)使客戶機/服務器模式成為可能,因為PC機具有一定的運算能力,用它代替了上面第一種模式的啞終端后,就可以把主機端的一部分工作放在客戶機端完成,從而減輕了主機的負擔,也增加了系統(tǒng)對用戶的響應速度和響應能力??蛻魴C和服務器之間通過相應的網(wǎng)絡協(xié)議來進行通訊??蛻魴C向服務器發(fā)出數(shù)據(jù)請求,服務器將數(shù)據(jù)傳送給客戶機進行計算,計算完畢,計算結果可返回給服務器。這種模式的優(yōu)點充分利用了客戶機的性能,使計算能力大大提高;另外,由于客戶機和服務器之間的通訊是
17、通過網(wǎng)絡協(xié)議進行的,是一種邏輯的聯(lián)系,因此物理上在客戶機和服務器兩端是易于擴充的。C/S模式是目前占主流的網(wǎng)絡計算模式。該模式在操作過程中采取的是主動請示方式:首先服務器方要先啟動,并根據(jù)請示提供相應服務(過程如下):(1)打開一個通信通道同時通知本地主機,服務器愿意在某一個公認地址上接收客戶請求。(2)等待某個客戶請求到達該端口。(3)接收到重復服務請求,處理該請求并發(fā)送應答信號。(4)返回第二步,等待另一客戶請求。(5)關閉該服務器??蛻舳耍?1)打開一個通信通道,并連接到服務器所在主機的特定端口。(2)向服務器發(fā)送服務請求報文,等待并接收應答;繼續(xù)提出請求。(3)請求結束后關閉通信通道并
18、終止。分布運算和分布管理是客戶機/服務器模式的特點。最后選擇了C/S模式。3 系統(tǒng)需求分析前面兩章介紹了課題的選題背景和相關的技術基礎和協(xié)議。在本章中將討論一下即時通訊系統(tǒng)的需求分析。3.1可行性分析經(jīng)濟可行性:由于本系統(tǒng)的主要背景是畢業(yè)課程設計,不注重直接的經(jīng)濟效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對自身的經(jīng)濟要求也不高,只要有一臺能運行Java軟件的電腦便可,所以不用考慮到經(jīng)濟問題。 技術可行性: 本系統(tǒng)的開發(fā)利用Microsoft SQL Server2000作為本系統(tǒng)的數(shù)據(jù)庫,它是一個支持多用戶的新型數(shù)據(jù)庫,適用于大中規(guī)模的數(shù)據(jù)量需求。學校校園網(wǎng)的建設也為新系統(tǒng)服務器/客
19、戶端的結構提供了硬件的支持。使用Java作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對象的支持及豐富的數(shù)據(jù)類型,給開發(fā)高性能系統(tǒng)提供的保障為開發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對新系統(tǒng)的擴展與修改。 運行可行性: 本系統(tǒng)為一個小型的局域網(wǎng)聊天系統(tǒng),所耗費的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運行上是可行的。 綜上所述,本系統(tǒng)的設計與開發(fā)在技術上和硬件設備上的條件都是滿足的,因此,它在技術上是可行的。3.2 系統(tǒng)功能需求本系統(tǒng)主要通過客戶端,服務器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務器端 1.處理用
20、戶注冊 2.處理用戶登錄 3.處理用戶發(fā)送信息,服務器監(jiān)控聊天內容,服務器過濾非法內容 4.處理用戶得到信息 5.處理用戶退出6. 服務器踢人。7. 保存服務器日志.8.保存用戶聊天信息。(2)客戶端 1.用戶注冊界面及結果 2.用戶登錄界面及結果 3.用戶發(fā)送信息界面及結果 4.用戶得到信息界面及結果 5.用戶退出界面及結果3.3 即時消息的安全需求A發(fā)送即時消息M給B,有以下幾種情況和相關需求:(1)如果無法發(fā)送,A必須接到確認;(2)如果M被投遞了,B只能接受M一次;(3)協(xié)議必須為B提供方法檢查A發(fā)送了這條信息;(4)協(xié)議必須允許B使用另一條即時信息,回復信息;(5)協(xié)議必須為A提供方
21、法保證沒有其他個體C可以篡改M;3.4 即時信息加密和鑒別(1)協(xié)議必須提供方法保證通知和即時消息的置信度,未被監(jiān)聽或者破壞;(2)協(xié)議必須提供方法保證通知和即時消息的置信度,未被重排序或者回放;(3)協(xié)議必須提供方法保證通知和即時消息被正確的實體閱讀;(4)協(xié)議必須允許客戶自己使用方法確保信息的不被截獲,不被重放和解密。3.5 即時通訊系統(tǒng)需求3.5.1 注冊需求(1)即時通訊系統(tǒng)擁有多個賬戶,允許多個用戶注冊;(2)一個用戶可以注冊多個ID;(3)注冊所使用的帳號類型為字母ID。3.5.2 通訊需求(1)用戶可以傳輸文本消息;(2)用戶可以傳輸RTF格式消息;(3)用戶可以加密/解密消息等
22、。4 系統(tǒng)設計在這里我們將該即時通訊系統(tǒng)命名為CHAT,現(xiàn)在對該系統(tǒng)進行總體設計。采用客戶機/服務器(C/S)的模式來設計,是一個2層的C/S結構:應用程序服務器應用程序客戶端,其分層機構如圖1所示。圖1 2層C/S結構示意圖客戶層也叫做應用表示層,也就是我們說的客戶端,這是應用程序的用戶接口部分。給即時通訊工具設計一個客戶層具有很多優(yōu)點,這是因為客戶層擔負著用戶與應用間的對話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應用的輸出數(shù)據(jù)。為了使用戶能直接地進行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統(tǒng)只需要改寫顯示控制和數(shù)據(jù)檢查程序就可以了,而不會影響其他兩層。服務層又叫做功能層,相當于應用
23、的本體,它是將具體的業(yè)務處理邏輯編入程序中。例如,用戶需要檢查數(shù)據(jù),系統(tǒng)設法將有關檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結果數(shù)據(jù),它也是一次性傳送給表示層的。在應用設計中,必須避免在表示層和功能層之間進行多次的數(shù)據(jù)交換,這就需要盡可能進行一次性的業(yè)務處理,達到優(yōu)化整體設計的目的。4.1即時聊天系統(tǒng)的實施原理4.1.1 工作方式和技術原理典型的IM工作方式如下:登陸CHAT通訊服務器,獲取一個自建立的歷史的交流對象列表(同事列表),然后自身標志為在線狀態(tài),當好友列表中的某人在任何時候登錄上線并試圖通過你的計算機聯(lián)系你時,IM系統(tǒng)會發(fā)一個消息提醒你,然
24、后你能與他建立一個聊天會話通道進行各種消息如鍵入文字、通過語音等的交流,從技術上來說,聊天系統(tǒng)的基本技術原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務器,服務器通過讀取用戶數(shù)據(jù)庫來驗證用戶身份,如果驗證通過,登記用戶A的IP地址、IM客戶端軟件的版本號及使用的TCP/UDP端口號,然后返回用戶A登錄成功的標志,此時用戶A在IM系統(tǒng)中的狀態(tài)為在線(Online Presence)。第二步,根據(jù)用戶A存儲在IM服務器上的好友列表(Buddy List),服務器將用戶A在線的相關信息發(fā)送給也同時在線的IM好友的PC機,這些信息包括在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)
25、號等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務器把用戶A存儲在服務器上的好友列表及相關信息回送到他的客戶端機,這些信息包括也在線狀態(tài)、IP地址、IM客戶端使用的TCP端口(Port)號等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態(tài)。4.1.2 通訊方式(1)在線直接通訊如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務器發(fā)送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機發(fā)出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復到用戶A的PC機,這樣雙方的即時文字消息就不再IM服務器中轉,而是直接通過網(wǎng)絡進行點對點的通訊,
26、即對等通訊方式(Peer To Peer)?!?】(2)在線代理通訊用戶A與用戶B的點對點通訊由于防火墻、網(wǎng)絡速度等原因難以建立或者速度很慢,IM服務器將會主動提供消息中轉服務,即用戶A和用戶B的即時消息全部先發(fā)送到IM服務器,再由服務器轉發(fā)給對方。4.2軟件設計流程因為該系統(tǒng)其需求是十分明確的,所以該系統(tǒng)的開發(fā)流程采用瀑布模型進行設計,分為幾大步驟:先進行需求分析,再是系統(tǒng)設計,然后是詳細設計與編碼,其次是軟件的測試,最后是軟件的運行和維護?!?】在實際過程中這些步驟經(jīng)常是重疊和彼此間有信息交換,它不是一個簡單線性過程,而是包括開發(fā)步驟的多個反復。如圖2所示。需求分析系統(tǒng)設計詳細設計與編碼軟
27、件測試軟件運行與維護圖2 即時通訊系統(tǒng)開發(fā)流程圖4.3功能模塊劃分該即時聊天工具按如下過程完成通信:(1)客戶向服務器注冊,告知服務器該客戶監(jiān)聽某主題;(2)客戶注冊之后,向服務器發(fā)送消息;(3)服務器再把消息發(fā)送給所有監(jiān)聽此主題的客戶。根據(jù)以上描述,該系統(tǒng)功能模塊圖請見圖3。即時聊天系統(tǒng)服務器端客戶端建立連接存儲數(shù)據(jù)監(jiān)聽用戶新建用戶登 錄通訊交流圖3 通訊系統(tǒng)的功能模塊4.3.1 服務器端由圖3可知服務器端完成至少3大功能:建立連接、存儲數(shù)據(jù)和監(jiān)聽客戶。這3大功能的具體含義如下:(1)建立一個ServerSocket連接,不斷偵聽是否有客戶端連接或者斷開連接。(2)服務器端是一個信息發(fā)送中心
28、,所有客戶端的信息都傳到服務器端,再由服務器根據(jù)要求分發(fā)出去。(3)數(shù)據(jù)庫數(shù)據(jù)操作包括將用戶信息存儲到數(shù)據(jù)庫等。4.3.2 客戶端客戶端要完成4大功能:新建立用戶、用戶登錄、通信交流。這些功能的含義如下:(1)新建立用戶:客戶端與服務器端建立通信信道,向服務器端發(fā)送新建用戶的信息,接收來自服務器的信息進行注冊。(2)用戶登錄:客戶端與服務器端建立通信信道,向服務器端發(fā)送信息,完成用戶登錄。(3)通信交流:客戶端可完成的信息的編輯、發(fā)送和接收等功能。4.4 數(shù)據(jù)庫概要設計因為本系統(tǒng)采用的是2級C/S結構模式,所以,為了減少服務器的存儲量,方便程序設計,本系統(tǒng)只對用戶信息進行存儲。利用JAVA中的
29、框架技術進行存儲。在中,各表的映射文件可以通過工具生成,在本系統(tǒng)中,用戶表信息可以用Xml代碼實現(xiàn)。用戶表(user)表1 用戶信息表名稱字段名稱類別主鍵非空用戶編號id數(shù)字是是登錄名CustName文本否是登錄密碼CustPassword文本否是年齡Age文本否是性別Sex文本否是電子郵箱email文本否是5 詳細設計5.1 服務器端的設計與實現(xiàn)作為C/S模式下的系統(tǒng)開發(fā),很顯然服務器端程序的設計是非常重要的。下面就服務器端的相關程序模塊進行設計,并一定程度上實現(xiàn)了相關功能。5.1.2 主服務器類的設計設計服務器時需要考慮如下幾個因素:(1)服務器的運行速度;(2)服務器的響應速度,包括新建
30、連接和發(fā)送數(shù)據(jù)的響應速度;(3)I/O吞吐量;(4)其他:流量控制(QoS)、安全性。針對TCP/IP協(xié)議的數(shù)據(jù)結構,設計服務器的程序結構需要考慮以下的因素:(1)多線程;(2)多進程;(3)單線程。主服務器類實現(xiàn)了服務器端的多線程,使用SeverSocket s=newServerSocket(1001)語句在1001端口創(chuàng)建套接口;使用new ServerThread(socket)語句創(chuàng)建新的線程。主服務器類調用ServerThread類,而每個ServerThread實體就是一個獨立的線程,剛好對應于客戶端的連接請求響應線程。服務器端有一個(或多個)進程在指定的端口等待客戶的連接信息,
31、一旦連接成功,就可以按設計的數(shù)據(jù)交換方法和格式進行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r候向服務器端發(fā)出連接請求。實現(xiàn)界面如圖4。圖4 服務器啟動界面現(xiàn)就其中一些核心代碼進行講解。public class JavaServer extends Thread其中public是JAVA的關鍵字,用來表示該類是共有,在整個程序里都可以訪問到它;Class表示類定義,它后面接著用戶定義的類的類名為AppServer;extends表示繼承的意思,他后面的類Thread是子類,能夠繼承父類AppServer所定義的一些變量。這條語言表示的意思就是聲明一個公共類AppServer,用子類Thread繼承父類AppS
32、erver中的一些變量。static boolean newMessage。其中,static是關鍵字,表示靜態(tài)變量,Boolean表示變量類型為布爾型,變量名為newMessage。這條語句的意思是定義一個靜態(tài)變量newMessage,它的類型為布爾型。值得強調的是布爾型數(shù)據(jù)只有兩個值true和false,并且它們不對應人數(shù)整數(shù)值。if(start) sFrame.txtStatus.setText("已啟動.");log(null,"服務器已啟動." );else sFrame.txtStatus.setText("關閉中.");
33、這是一條if條件判斷語句,它表示變量start如果不為空,那么執(zhí)行語句第一個大括號中的語句,如果為空,則執(zhí)行else中的語句。其中,log為輸出語句,表示在窗口中輸出“服務器已啟動”信息。public void run() try while (start) Socket client = serverSocket.accept();Connection con = new Connection(client, u, v, userInfo); catch (IOException e) log(e, "不能監(jiān)聽!");這個函數(shù)的作用是監(jiān)聽用戶信息,void表示定義的函數(shù)不
34、需要返回值,while是循環(huán)語句關鍵字,在語句中的意思為直到start的值不為空,將循環(huán)執(zhí)行后面括號的語句,直到start值為空后,循環(huán)才結束。Connection con表示連接用戶信息。Catch是對java中的異常進行捕獲,并且能夠拋出異常,便于程序能夠正常運行。5.1.2 登錄驗證模塊系統(tǒng)的登錄模塊是比較重要的,這是用戶的一個身份驗證,是通訊系統(tǒng)必須的一個功能模塊。如果客戶端輸入的字符串表方式需要登錄,那么服務器在接收到該信息后連接數(shù)據(jù)庫,準備從數(shù)據(jù)庫選擇昵稱和密碼。服務器接收到客戶端發(fā)送過來的號碼和密碼信息后,設定數(shù)據(jù)庫查尋條件,并執(zhí)行數(shù)據(jù)庫查尋,通過比較輸入的用戶名和密碼數(shù)據(jù)庫信息
35、來卻請用戶的登錄是否成功。以下為登陸驗證的流程圖。符合不符合登陸系統(tǒng)輸入帳號密碼驗證進入系統(tǒng)圖5 用戶登錄流程圖5.1.3 注冊處理模塊新建用戶是即時通訊工具的一個基本功能。用戶新建過程也在線程監(jiān)聽函數(shù)run()中。新建用戶的過程是這樣的:首先使用Register_Customer()方法加載數(shù)據(jù)庫驅動類;然后使用dao.getUser()方法獲取數(shù)據(jù);在獲取注冊名時,進行判斷,查看用戶名是否重復,如果重復,則向客戶端彈出提示信息,見圖6;如果不重復,服務器接收客戶端用戶發(fā)送的昵稱、密碼、用戶E-mail等信息,執(zhí)行數(shù)據(jù)庫添加操作完成用戶的創(chuàng)建;最后向用戶反饋注冊成功信息。圖6 注冊名重復提示
36、信息5.2 客戶端的設計與實現(xiàn)前一章介紹了服務器端的設計與實現(xiàn),對于C/S模式的系統(tǒng)而言,還必須對系統(tǒng)的客戶端進行設計和實現(xiàn)。下面就來解決這樣一個問題。客戶端通過Socket與服務器建立連接。服務器與客戶都通過構造BufferedReader、PrintWriter來建立輸入流和輸出流,雙方通過該輸入流和輸出流來相互傳遞信息。只要收到客戶端的連接請求,服務器利用accept()函數(shù)返回一個新建的Socket對象,隨后客戶端向服務器發(fā)送消息,諸如注冊、登錄和查找同事等請求,服務器收到請求后,針對不同的消息處理請求。5.2.1 用戶注冊模塊當用戶向服務器端發(fā)出注冊請求后,客戶端將向服務器發(fā)送客戶傳
37、遞的信息,諸如客戶的昵稱、性別、個人資料等信息。等服務器接收完畢后,服務器會通過hibernate框架讀取數(shù)據(jù)庫信息,并進行判斷,最后在客戶端收到服務器的反饋信息。現(xiàn)對部分關鍵語句進行講解。public class Register extends JFrame implements ActionListener Toolkit toolkit=Toolkit.getDefaultToolkit();JButton btnOk,btnCancel,btnClear;public Register(String ip) btnOk=new JButton("確定(O)");
38、btnOk.setMnemonic('O'); btnOk.setToolTipText("保存注冊信息"); btnOk.setBounds(250,135,80,25);Implement繼承于接口類時用的關鍵詞【7】,在數(shù)據(jù)接口位置使用,在這里表示類ActionListen類繼承類Register。JButton btnOk,btnCancel,btnClear。這條語句中,JButton其實是一個類,名為JButton按鈕類,它是JAVA中自帶的一種控件,當鼠標移入、移出、被點擊所定義的3個變量時,會觸發(fā)JButton類,從而執(zhí)行相應的操作。如在類R
39、egister中,當鼠標點擊“確定”按鈕時,則會觸發(fā)類JButton定義的變量btnOk,并且為其賦值,進而調用setToolTipText方法,將注冊信息進行保存。而setBounds類是JAVA自帶類,他能夠設置組件位置【8】,即確定注冊窗口位置。見圖7。圖7 用戶注冊界面5.2.2 用戶登錄當用戶點擊登錄時,客戶端發(fā)起請求與服務端建立連接,登錄信息首先在客戶端做驗證,然后通過填寫的服務器IP地址申請與服務端建立連接。而在服務器端,有一個主線程專門創(chuàng)建SOCKET服務,等待客戶端的連接,每當客戶端發(fā)起連接的申請時,與之建立連接,并創(chuàng)建一個線程,將建立的連接交給這個線程處理,并將連接存入一個
40、集合中,用于后續(xù)業(yè)務的處理。然后服務器將反序列化客戶端傳輸過來的數(shù)據(jù),生成一個用戶對象。從中獲取登錄填寫的信息,根據(jù)用戶名和密碼在數(shù)據(jù)庫中查找數(shù)據(jù),如果能夠找到表示登錄成功,反之,登錄不成功。最后將登錄的結果通過文本發(fā)送給客戶端發(fā)送給服務端。最后,如果通過驗證,得到一個標志,進入聊天主窗體,否則彈出登錄失敗的對話框,讓用戶重新登錄。登陸界面見圖8圖8 用戶登陸界面現(xiàn)對部分關鍵代碼進行講解:public void actionPerformed(ActionEvent ae)Object source=ae.getSource();if (source.equals(btnLogin) if(t
41、xtUserName.getText().equals("") | pwdPassword.getText().equals("") JOptionPane op1=new JOptionPane(); op1.showMessageDialog(null,"用戶名或密碼不能為空"); else strServerIp=txtServer.getText(); login(); 該語句表示的意思為接受用戶登陸信息,如果用戶名或者密碼為空,則彈出提示信息,如果不為空,則調用login方法。這里equals表示接受變量的值;“|”表示“或
42、”的意思,;showMessageDialog是JAVA的自帶控件,作用是在當前界面彈出對話框;關鍵字new,是一種調用方法,表示能夠直接調用類的構造方法。5.2.3 在線用戶顯示設計用戶完成登錄后,客戶端與服務器端建立連接。連接建立成功后,客戶向服務器請求讀取在線人員名單;服務器收到該請求,開始讀取數(shù)據(jù)庫中的user表并得到同事的號碼,向客戶端發(fā)送這些信息;客戶收到服務器信息后,在主窗口顯示顯現(xiàn)成員的昵稱。其實現(xiàn)代碼如下:for (int i=0;i<messobj.userOnLine.size();i+) String User=(String)messobj.userOnLine
43、.elementAt(i); lstUserList.addItem(User); 這里采用了for循環(huán),定義變量i,初值為0,只要i滿足;i<messobj.userOnLine.size()這個條件,循環(huán)將執(zhí)行一次。執(zhí)行完一次循環(huán)后i的值自動加1,這里的messobj.userOnLine.size()表示在線用戶的人數(shù),lstUserList.addItem(User)表示顯示用戶的昵稱。5.2.4 聊天信息發(fā)送與接收聊天信息的發(fā)送與接收都是通過Socket類實現(xiàn)的。使用Socket對網(wǎng)絡上某一個服務器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket。
44、也就是說,在服務端開啟socket服務,客戶端每一次連接成功時也都會同時創(chuàng)建一個線程來處理這次連接的請求,而該連接會被保存在一個集合中,直到服務結束,連接關閉,該線程也會結束,同時從連接的集合中移除該連接。(1)信息發(fā)送用戶在每次發(fā)送信息時,首先向服務器發(fā)送的是自己信息和發(fā)送對象信息,然后再通過Socket類向服務器發(fā)送信息。當然,在每次輸入信息后,輸入信息框的內容將會被清空。關鍵代碼如下: public void sendMessage() chatobj.chatUser=strLoginName; chatobj.chatMessage=txtMessage.getText(); cha
45、tobj.chatToUser=String.valueOf(cmbUser.getSelectedItem(); chatobj.whisper=chPrivateChat.isSelected()?true:false;/向服務器發(fā)送信息 trySocket toServer=new Socket(strServerIp,1001); ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream(); outObj.writeObject(chatobj); txtMessage.setText(&quo
46、t;"); /清空文本框 outObj.close(); catch(Exception e)其中,方法中的前三句表示系統(tǒng)獲取發(fā)送信息者的昵稱,發(fā)送信息內容以及發(fā)送對象的昵稱;chPrivateChat.isSelected()?true:false這是一個判斷語句,表示信息值是否為空,如果isSelected方法有值,那么將true賦給chatobj.whisper,如果為空,則賦false。在上文中,我們講到了catch有拋出異常的作用,而trycatch也是具有相同的功能,try 塊塊是需要捕獲異常的,因為文件有可能不存在,會導致程序崩潰,所以直接捕獲,也可以直接throws
47、出去,讓調用該方法的方法去捕獲,從而使程序能夠正常進行。此外,函數(shù)Socket(strServerIp,1001) 用來創(chuàng)建一個能夠進行網(wǎng)絡通信的套接字。參數(shù)strServerIp為通信協(xié)議的協(xié)議族,1001則為服務器IP。而outObj.writeObject(chatobj)的作用則是把調用writeObject方法,將信息發(fā)送到服務器。(2)信息輸出本即時聊天系統(tǒng)的信息輸出原理是將所有輸入信息通過socket類向服務器發(fā)送,然后直接從服務器中突出信息。關鍵代碼如下:Socket toServer;toServer=new Socket(strServerIp,1001);/將信息發(fā)往服務
48、器Message messobj=new Message();messobj.username = strLoginName;ObjectOutputStream streamtoserver=new ObjectOutputStream (toServer.getOutputStream();streamtoserver.writeObject(Message)messobj);/收來自服務器的信息由于上文以對很多方法進行講解,現(xiàn)主要對ObjectOutputStream進行講解。ObjectOutputStream 將 Java 對象的基本數(shù)據(jù)類型和圖形寫入 OutputStream??梢?/p>
49、使用 ObjectInputStream 讀?。ㄖ貥嫞ο?。通過在流中使用文件可以實現(xiàn)對象的持久存儲。如果流是網(wǎng)絡套接字流,則可以在另一臺主機上或另一個進程中重構對象。也就是說通過ObjectOutputStream 將toServer.getOutputStream()進行重構,從而將服務器接受的信息重構到客戶機上,最后通過streamtoserver.writeObject()方法將信息寫在客戶端上。5.3 數(shù)據(jù)庫設計在前文我們已經(jīng)分析了數(shù)據(jù)庫的實現(xiàn)是采用了hibernate框架中的.XML映射。以下則為實現(xiàn)的關鍵代碼:-<hibernate-mapping package=&quo
50、t;org.seler.bean" auto-import="true">-<class name="Register_Customer" table="user"> <id name="id" column="id"> <generator class="native" /> </id> <property name="custName" not-null="true&quo
51、t; unique="true" optimistic-lock="true" lazy="false" /> <property name="custPassword" not-null="true" unique="false" optimistic-lock="true" lazy="false" /> <property name="age" not-null="true&q
52、uot; unique="false" optimistic-lock="true" lazy="false" /> <property name="sex" not-null="true" unique="false" optimistic-lock="true" lazy="false" /> <property name="email" not-null="true"
53、 unique="false" optimistic-lock="true" lazy="false" /> </class> </hibernate-mapping>其中,package="org.seler.bean"表示調用該框架bean中的數(shù)據(jù)包;auto-import="true"表示hibernate框架中的將映射文件實體;property表示元素定義,name表示字段名;not-null表示是否設置該字段為空;unique表示是否設置該字段為唯一值;o
54、ptimistic-lock指定此屬性做更新操作時是否需要樂觀鎖定; lazy指定是否采用延遲加載及加載策略,設置為false,表示此關聯(lián)對象不采用延遲加載。6 結論本項目是一個JAVA及時通訊系統(tǒng),在做系統(tǒng)的三個月之內,遇到了很多的問題,但是也從問題之中學習到了很多東西。比如亂碼問題,比如socket問題,許許多多,但是從中多虧了導師的幫助,我才能順利的解決,所以我在這里衷心的感謝我的導師我的同學,感謝大家對我的幫助,才讓我能順利的完成畢業(yè)設計!其次,本即時聊天系統(tǒng)采用了C/S模型。服務器在C/S模型中處于一個中心地位。服務器一般同時為多個客戶提供服務,這就造成了服務器設計的復雜性。即時通訊服務器是數(shù)據(jù)中心,它是客戶活動的中介,需要同時應對眾多客戶的請求。再次,本文并沒有采用復雜的SQL,ORICLE等數(shù)據(jù)庫,而是通過hibernate框架對數(shù)據(jù)進行映射,然后利用*.hbm.xml將數(shù)據(jù)進行存儲。上面的這些問題,我以后都將會深深的記住。并且將其運用在實踐中去。致謝為期一個學期的畢業(yè)論文(設計)已接近尾聲了,我的四年大學生涯也即將圈上一個句號。此刻我的心中卻有些悵然若失,因為那些熟悉的計科學院的恩師們和各位可愛的同學們,我們也即將揮手告別了。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 淺論多媒體在計算機教學中的應用
- 《新能源材料專業(yè)英語》教學大綱
- 禮儀課題文檔
- 教案 均值不等式教案
- 玉溪師范學院《土地生態(tài)學》2023-2024學年第一學期期末試卷
- 名著經(jīng)典語錄摘要
- 婚姻家庭繼承法教案
- 電影放映機賬務處理實例-記賬實操
- 房地產(chǎn) -太平山文旅開發(fā)規(guī)劃方案融合運營規(guī)劃提案
- 2024年空氣清新香片項目綜合評估報告
- 通江縣房地產(chǎn)市場調研報告
- 投擲:上步投沙包
- 關于增設交通標志的請示3
- 專利檢索制度
- 【建筑工程管理】建筑業(yè)統(tǒng)計指標解釋
- 陰陽五行學說ppt課件
- 電子科學與技術專業(yè)介紹圖文ppt課件
- 2715090125河北省建筑工程技術資料管理規(guī)程(DB13(J)35).doc
- 消毒內鏡清洗消毒操作流程圖
- 綜合實踐活動衣服的學問一服裝面料特點大搜索課件(7)ppt課件
- 復雜零件的數(shù)控加工工藝畢業(yè)設計論文
評論
0/150
提交評論