即時聊天系統的設計與實現.doc_第1頁
即時聊天系統的設計與實現.doc_第2頁
即時聊天系統的設計與實現.doc_第3頁
即時聊天系統的設計與實現.doc_第4頁
即時聊天系統的設計與實現.doc_第5頁
免費預覽已結束,剩余20頁可下載查看

下載本文檔

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

文檔簡介

內江師范學院本科畢業論文(設計)目 錄1 前言31.1 課題選題背景31.2即時通信的概念和特點31.3即時聊天系統的發展42 涉及的相關技術及協議42.1 Java語言42.2 C/S模式介紹52.3 Hibernate框架簡介63 系統需求分析63.1即時聊天消息的一般需求63.2 即時消息的協議需求73.3 即時消息的安全需求73.4 即時信息加密和鑒別73.5 即時通訊系統需求74 系統設計74.1即時聊天系統的實施原理84.2軟件設計流程94.3功能模塊劃分104.4 數據庫概要設計105 詳細設計115.1 服務器端的設計與實現115.1.2 主服務器類的設計115.1.2 登錄驗證模塊135.1.3 注冊處理模塊135.2 客戶端的設計與實現145.2.1 用戶注冊模塊145.2.2 用戶登錄155.2.3 在線用戶顯示設計165.2.4 聊天信息發送與接收175.3 數據庫設計186 結論19致謝21參考文獻22附錄23基于Java即時聊天系統的設計與實現摘要:計算機網絡技術高速發展的今天,即時通訊方式日益受到人們的青睞。即時聊天工具在實現傳輸視頻與音頻信息,使協作成員可以遠距離進行直觀、真實的視音交流的同時,利用多媒體的技術,它還可以幫助使用者對工作中各種信息進行處理。本課題研究的是支持內部網絡交流的系統網絡即時通訊系統。該系統使用Java語言進行編程。系統采用C/S結構模式,支持局域網和Internet。該系統采用軟件工程的瀑布模型進行開發,分別討論了系統的需求分析、概要設計、詳細設計和編碼、以及整個系統的運行和測試。關鍵詞:即時聊天;系統;Java;C/S Abstract: 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 information, 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 - network 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, and run and test the whole system. Finally, the paper concluded. Of course, the system there are some imperfections, and seek to study and work in the future be amended so that the system actually used in a variety of network efficiency.Keywords:Instant Messager; System; JAVA; C/S1 前言交流對于人類社會及其每個成員都至關重要。直接交流的方式包括語言、文字等,而遠程交流還需借助于一些先進的工具如電話、網絡等。本課題研究的是支持內部網絡交流的系統網絡即時通訊系統。該課題在實施的過程中需要使用Java語言。1.1 課題選題背景計算機技術、網絡技術高速發展的今天,即時通訊方式日益受到人們的青睞。即時通訊工具在實現傳輸視頻與音頻信息,使協作成員可以遠距離進行直觀、真實的視音交流的同時,利用多媒體的技術,它還可以幫助使用者對工作中各種信息進行處理。大家都知道,網絡上常用的即時通訊工具之一有ICQ。其實,ICQ是英文“I seek you”的簡稱,中文意思是“我找你”。ICQ最大的功能便是即時信息交流,只要記得對方的號碼,上網時可以呼他,無論他在哪里,只要他上網打開ICQ,人們就可以隨時交流。目前即時聊天系統種類眾多,功能也較為齊全。該課題現在所研究的即時通訊系統,其目標是定位于企業內部網絡,解決企業或單位的溝通及協同的問題,提高工作效率。企業內部員工可以利用該通訊系統隨時隨地發送文字消息、進行多人群聊、消息群發、傳送文件、音頻視頻對話等。系統包括客戶端程序和服務器端程序,支持局域網和Internet。企業內部員工之間可以在內部網覆蓋的任何地點、任何時間進行即時交流,真正實現企業內部協同工作。使您不必花費大量的時間、金錢聚集到一個地方,通過網絡,就能實現面對面的溝通,提高了效率。MSN、QQ等公共消息系統,由于聊天對象及內容的不可控,若在企業內部使用,可能會降低工作效率。而該即時通訊系統將自己的服務器端安裝在企業內,并且人員的創建是由系統管理員來完成,因此很好的解決了這個問題。即時通訊帶給了更大的互動性,人們在交流彼此的看法、意見時,發現采用你來我往的方式達到的效果最為明顯。這就體現了互動性。通過使用及時通訊系統,大家不需要離開電腦,不需要借助其它額外的工具,就可以在線實時地交流工作。1.2即時通信的概念和特點即時通訊(IM)是一個允許兩人或多人使用網絡即時地傳遞文字信息、檔案、語音與視頻交流的終端服務。即時通訊不同于e-mail在于它的交談是即時的。【1】大部分的即時通訊服務提供了presence awareness的特性顯示聯絡人名單,聯絡人是否在在線與能否與聯絡人交談。在早期的即時通訊程序中,使用者輸入的每一個字符都會即時顯示在雙方的銀幕,且每一個字符的刪除與修改都會即時的反應在銀幕上。這種模式比起使用e-mail更像是電話交談,充分體現了其實時特性。在現在的即時通訊程序中,為了畫面的完整美觀和交流方便,交談中的另一方通常只會在本地端按下送出鍵(Enter或是Ctrl+Enter)后才會看到信息。1.3即時聊天系統的發展二十世紀七十年代早期,一種較早的即時通訊形式是柏拉圖系統(PLATO system)。八十年代,UNIX/Linux的交談即時信息被廣泛的使用于工程師與學術界,九十年代即時通訊更可跨越了操作系統平臺交流,1996年11月,首個廣泛被非UNIX/Linux使用者用于因特網的即時通訊軟件ICQ出現。通常認為ICQ是現在流行使用的即時通訊軟件的開山之作。ICQ源于以色列特拉維夫的Mirabils公司。該公司成立于1996年月,也就是在這個時候,四個月后的1996年11月,互聯網上最出名,下載使用人數最多的免費軟件ICQ誕生了,她是由幾個以色列的年輕人制作的,在無人投資的情況下,他們向全球互聯網用戶提供免費下載使用,到了1998年,Mirabilis公司的ICQ用戶已經發展到1200萬人,并以每月100萬用戶的速度增加。這時候,ICQ公司由于其潛在的巨大商業廣告價值,已經成為許多大公司爭相購買的對象,1998年ICQ公司將自己開發的軟件連同用戶一起“賣”給了美國在線(AOL),售價2.87億美元。據美國在線1999年底稱,ICQ使用者已達5000萬,其中超過三分之二的使用者居住在美國本土以外的世界各地。ICQ造就的實時通信成了互聯網世界中發展最快的一個領域。2 涉及的相關技術及協議為了保證課題能正常實施,先來分析一下課題所需要的相關技術和協議。2.1 Java語言經過認真的討論分析,綜合各種計算機高級語言的特征和適應范圍,最終決定選擇純面向對象的Java語言來完成畢業論文的設計,下面就技術可行性方面,對Java語言作一簡要介紹。Sun公司的口號就是“網絡就是計算機”,Java能使所有東西從桌面計算平穩的轉變為基于網絡的計算,它是專門為此而建立的,并顯然是為了完成這個任務而來的。使用Java語言,可以相對輕松的一天編寫一個有條理的網絡程序。今天,Java的網絡功能正在飛躍發展,不斷有新的特性增加到這個有價值的基礎上,JavaSoft實驗室正在不斷努力使Java更加完善。就Java語言的主要特點,本人歸納如下:Java程序設計的開發過程與運行環境Java是解釋型的高級編程語言,所以Java程序的開發通常需要經過編寫源程序、編譯生成字節碼和運行三個過程。這里要提到,Java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。Java編譯程序將Java源程序翻譯為JVM可執行代碼字節碼。這一編譯過程同C/C+的編譯有些不同。當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平臺運行而產生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。Java編譯器卻不將對變量和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在字節碼中,由解釋器在運行過程中創立內存布局,然后再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。【2】2.2 C/S模式介紹20世紀90年代出現并迅速占據主導地位的一種計算模式為客戶機/服務器模式,簡稱為C/S模式,它實際上就是把主機終端模式中原來全部集中在主機部分的任務一分為二,保留在主機上的部分負責集中處理和匯總運算,成為服務器;而下放到終端的部分負責為用戶提供友好的交互界面,稱為客戶機。【3】相對于以前的模式,C/S模式最大的改進是不再把所有軟件都裝進一臺計算機,而是把應用系統分成兩個不同的角色和兩個不同的地位:一般在運算能力較強的計算機上安裝服務器端程序,而在一般的PC上安裝客戶機程序。正是由于個人PC機的出現使客戶機/服務器模式成為可能,因為PC機具有一定的運算能力,用它代替了上面第一種模式的啞終端后,就可以把主機端的一部分工作放在客戶機端完成,從而減輕了主機的負擔,也增加了系統對用戶的響應速度和響應能力。客戶機和服務器之間通過相應的網絡協議來進行通訊。客戶機向服務器發出數據請求,服務器將數據傳送給客戶機進行計算,計算完畢,計算結果可返回給服務器。這種模式的優點充分利用了客戶機的性能,使計算能力大大提高;另外,由于客戶機和服務器之間的通訊是通過網絡協議進行的,是一種邏輯的聯系,因此物理上在客戶機和服務器兩端是易于擴充的。C/S模式是目前占主流的網絡計算模式。該模式在操作過程中采取的是主動請示方式:首先服務器方要先啟動,并根據請示提供相應服務(過程如下):(1)打開一個通信通道同時通知本地主機,服務器愿意在某一個公認地址上接收客戶請求。(2)等待某個客戶請求到達該端口。(3)接收到重復服務請求,處理該請求并發送應答信號。(4)返回第二步,等待另一客戶請求。(5)關閉該服務器。客戶端:(1)打開一個通信通道,并連接到服務器所在主機的特定端口。(2)向服務器發送服務請求報文,等待并接收應答;繼續提出請求。(3)請求結束后關閉通信通道并終止。分布運算和分布管理是客戶機/服務器模式的特點。最后選擇了C/S模式。2.3 Hibernate框架簡介Hibernate是一種Java語言下的對象關系映射解決方案。它是一種自由、開源的軟件。它用來把對象模型表示的對象映射到基于SQL 的關系模型結構中去,為面向對象的領域模型到傳統的關系型數據庫的映射,提供了一個使用方便的框架。 主要作用有:Hibernate 不僅管理Java 類到數據庫表的映射(包括從Java數據類型到SQL數據類型的映射),還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用SQL 和JDBC 處理數據的時間。【4】它的設計目標是將軟件開發人員從大量相同的數據持久層相關編程工作中解放出來。無論是從設計草案還是從一個遺留數據庫開始,開發人員都可以采用Hibernate。在應用方面,Hibernate對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,它既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用。最具革命意義的是,Hibernate可以在應用EJB(Enterprise JavaBeans是Java應用于企業計算的框架)的J2EE架構中取代CMP,完成數據持久化的重任。3 系統需求分析前面兩章介紹了課題的選題背景和相關的技術基礎和協議。在本章中將討論一下即時通訊系統的需求分析。3.1即時聊天消息的一般需求3.1.1一般即時消息格式需求(1)所有實體必須至少使用一種消息格式;(2)一般即時消息格式必須定義發信者和即時收件箱的標識;(3)一般即時消息格式必須包含一個讓接收者可以回消息的地址;(4)一般即時信息格式必須允許對信息有效負載的編碼和鑒別(非ASCII內容);(5)必須提供擴展和注冊即時消息格式的模式的機制。3.1.2可靠性需求協議必須存在機制,保證即時消息成功投遞或者投遞失敗的時候,發信者獲得足夠的信息。3.1.3性能需求(1)即時消息的傳輸必須足夠的迅速;(2)即時消息的內容必須足夠豐富;(3)即時消息的長度盡量足夠的長。3.2 即時消息的協議需求協議是一系列的步驟,它包括雙方或者多方,設計它的目的是要完成一項任務。即時通訊協議,參與的雙方或者多方是即時通訊的實體。協議必須是雙方或者多方參與的,一方單獨完成的就不算協議。這樣在協議動作的過程中,雙方必須交換信息,包括控制信息、狀態信息等等。這些信息的格式必須是協議參與方同意并且遵循的。好的協議要求清楚、完整,每一步都必須有明確的定義,并且不會引起誤解;對每種可能的情況必須規定具體的動作。3.3 即時消息的安全需求A發送即時消息M給B,有以下幾種情況和相關需求:(1)如果無法發送,A必須接到確認;(2)如果M被投遞了,B只能接受M一次;(3)協議必須為B提供方法檢查A發送了這條信息;(4)協議必須允許B使用另一條即時信息,回復信息;(5)協議必須為A提供方法保證沒有其他個體C可以篡改M;3.4 即時信息加密和鑒別(1)協議必須提供方法保證通知和即時消息的置信度,未被監聽或者破壞;(2)協議必須提供方法保證通知和即時消息的置信度,未被重排序或者回放;(3)協議必須提供方法保證通知和即時消息被正確的實體閱讀;(4)協議必須允許客戶自己使用方法確保信息的不被截獲,不被重放和解密。3.5 即時通訊系統需求3.5.1 注冊需求(1)即時通訊系統擁有多個賬戶,允許多個用戶注冊;(2)一個用戶可以注冊多個ID;(3)注冊所使用的帳號類型為字母ID。3.5.2 通訊需求(1)用戶可以傳輸文本消息;(2)用戶可以傳輸RTF格式消息;(3)用戶可以加密/解密消息等。4 系統設計在這里我們將該即時通訊系統命名為CHAT,現在對該系統進行總體設計。采用客戶機/服務器(C/S)的模式來設計,是一個2層的C/S結構:應用程序服務器應用程序客戶端,其分層機構如圖1所示。圖1 2層C/S結構示意圖客戶層也叫做應用表示層,也就是我們說的客戶端,這是應用程序的用戶接口部分。給即時通訊工具設計一個客戶層具有很多優點,這是因為客戶層擔負著用戶與應用間的對話功能。它用于檢查用戶的輸入數據,顯示應用的輸出數據。為了使用戶能直接地進行操作,客戶層需要使用圖形用戶接口。若通訊用戶變更,系統只需要改寫顯示控制和數據檢查程序就可以了,而不會影響其他兩層。服務層又叫做功能層,相當于應用的本體,它是將具體的業務處理邏輯編入程序中。例如,用戶需要檢查數據,系統設法將有關檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結果數據,它也是一次性傳送給表示層的。在應用設計中,必須避免在表示層和功能層之間進行多次的數據交換,這就需要盡可能進行一次性的業務處理,達到優化整體設計的目的。4.1即時聊天系統的實施原理4.1.1 工作方式和技術原理典型的IM工作方式如下:登陸CHAT通訊服務器,獲取一個自建立的歷史的交流對象列表(同事列表),然后自身標志為在線狀態,當好友列表中的某人在任何時候登錄上線并試圖通過你的計算機聯系你時,IM系統會發一個消息提醒你,然后你能與他建立一個聊天會話通道進行各種消息如鍵入文字、通過語音等的交流,從技術上來說,聊天系統的基本技術原理如下:第一步,用戶A輸入自己的用戶名和密碼登錄IM服務器,服務器通過讀取用戶數據庫來驗證用戶身份,如果驗證通過,登記用戶A的IP地址、IM客戶端軟件的版本號及使用的TCP/UDP端口號,然后返回用戶A登錄成功的標志,此時用戶A在IM系統中的狀態為在線(Online Presence)。第二步,根據用戶A存儲在IM服務器上的好友列表(Buddy List),服務器將用戶A在線的相關信息發送給也同時在線的IM好友的PC機,這些信息包括在線狀態、IP地址、IM客戶端使用的TCP端口(Port)號等,IM好友的客戶端收到此信息后將在予以提示。第三步是IM服務器把用戶A存儲在服務器上的好友列表及相關信息回送到他的客戶端機,這些信息包括也在線狀態、IP地址、IM客戶端使用的TCP端口(Port)號等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態。4.1.2 通訊方式(1)在線直接通訊如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務器發送過來的用戶B的IP地址、TCP端口號等信息,直接向用戶B的PC機發出聊天信息,用戶B的IM客戶端軟件收到后顯示在屏幕上,然后用戶B再直接回復到用戶A的PC機,這樣雙方的即時文字消息就不再IM服務器中轉,而是直接通過網絡進行點對點的通訊,即對等通訊方式(Peer To Peer)。【5】(2)在線代理通訊用戶A與用戶B的點對點通訊由于防火墻、網絡速度等原因難以建立或者速度很慢,IM服務器將會主動提供消息中轉服務,即用戶A和用戶B的即時消息全部先發送到IM服務器,再由服務器轉發給對方。4.2軟件設計流程因為該系統其需求是十分明確的,所以該系統的開發流程采用瀑布模型進行設計,分為幾大步驟:先進行需求分析,再是系統設計,然后是詳細設計與編碼,其次是軟件的測試,最后是軟件的運行和維護。【6】在實際過程中這些步驟經常是重疊和彼此間有信息交換,它不是一個簡單線性過程,而是包括開發步驟的多個反復。如圖2所示。需求分析系統設計詳細設計與編碼軟件測試軟件運行與維護圖2 即時通訊系統開發流程圖4.3功能模塊劃分該即時聊天工具按如下過程完成通信:(1)客戶向服務器注冊,告知服務器該客戶監聽某主題;(2)客戶注冊之后,向服務器發送消息;(3)服務器再把消息發送給所有監聽此主題的客戶。根據以上描述,該系統功能模塊圖請見圖3。即時聊天系統服務器端客戶端建立連接存儲數據監聽用戶新建用戶登 錄通訊交流圖3 通訊系統的功能模塊4.3.1 服務器端由圖3可知服務器端完成至少3大功能:建立連接、存儲數據和監聽客戶。這3大功能的具體含義如下:(1)建立一個ServerSocket連接,不斷偵聽是否有客戶端連接或者斷開連接。(2)服務器端是一個信息發送中心,所有客戶端的信息都傳到服務器端,再由服務器根據要求分發出去。(3)數據庫數據操作包括將用戶信息存儲到數據庫等。4.3.2 客戶端客戶端要完成4大功能:新建立用戶、用戶登錄、通信交流。這些功能的含義如下:(1)新建立用戶:客戶端與服務器端建立通信信道,向服務器端發送新建用戶的信息,接收來自服務器的信息進行注冊。(2)用戶登錄:客戶端與服務器端建立通信信道,向服務器端發送信息,完成用戶登錄。(3)通信交流:客戶端可完成的信息的編輯、發送和接收等功能。4.4 數據庫概要設計因為本系統采用的是2級C/S結構模式,所以,為了減少服務器的存儲量,方便程序設計,本系統只對用戶信息進行存儲。利用JAVA中的hibernate框架技術進行存儲。在Hibernate中,各表的映射文件.hbm.xml可以通過工具生成,在本系統中,用戶表信息可以用Xml代碼實現。用戶表(user)表1 用戶信息表名稱字段名稱類別主鍵非空用戶編號id數字是是登錄名CustName文本否是登錄密碼CustPassword文本否是年齡Age文本否是性別Sex文本否是電子郵箱email文本否是5 詳細設計5.1 服務器端的設計與實現作為C/S模式下的系統開發,很顯然服務器端程序的設計是非常重要的。下面就服務器端的相關程序模塊進行設計,并一定程度上實現了相關功能。5.1.2 主服務器類的設計設計服務器時需要考慮如下幾個因素:(1)服務器的運行速度;(2)服務器的響應速度,包括新建連接和發送數據的響應速度;(3)I/O吞吐量;(4)其他:流量控制(QoS)、安全性。針對TCP/IP協議的數據結構,設計服務器的程序結構需要考慮以下的因素:(1)多線程;(2)多進程;(3)單線程。主服務器類實現了服務器端的多線程,使用SeverSocket s=newServerSocket(1001)語句在1001端口創建套接口;使用new ServerThread(socket)語句創建新的線程。主服務器類調用ServerThread類,而每個ServerThread實體就是一個獨立的線程,剛好對應于客戶端的連接請求響應線程。服務器端有一個(或多個)進程在指定的端口等待客戶的連接信息,一旦連接成功,就可以按設計的數據交換方法和格式進行數據傳輸。客戶端只在需要的時候向服務器端發出連接請求。實現界面如圖4。圖4 服務器啟動界面現就其中一些核心代碼進行講解。public class AppServer extends Thread其中public是JAVA的關鍵字,用來表示該類是共有,在整個程序里都可以訪問到它;Class表示類定義,它后面接著用戶定義的類的類名為AppServer;extends表示繼承的意思,他后面的類Thread是子類,能夠繼承父類AppServer所定義的一些變量。這條語言表示的意思就是聲明一個公共類AppServer,用子類Thread繼承父類AppServer中的一些變量。static boolean newMessage。其中,static是關鍵字,表示靜態變量,Boolean表示變量類型為布爾型,變量名為newMessage。這條語句的意思是定義一個靜態變量newMessage,它的類型為布爾型。值得強調的是布爾型數據只有兩個值true和false,并且它們不對應人數整數值。if(start) sFrame.txtStatus.setText(已啟動.);log(null,服務器已啟動. );else sFrame.txtStatus.setText(關閉中.);這是一條if條件判斷語句,它表示變量start如果不為空,那么執行語句第一個大括號中的語句,如果為空,則執行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, 不能監聽!);這個函數的作用是監聽用戶信息,void表示定義的函數不需要返回值,while是循環語句關鍵字,在語句中的意思為直到start的值不為空,將循環執行后面括號的語句,直到start值為空后,循環才結束。Connection con表示連接用戶信息。Catch是對java中的異常進行捕獲,并且能夠拋出異常,便于程序能夠正常運行。5.1.2 登錄驗證模塊系統的登錄模塊是比較重要的,這是用戶的一個身份驗證,是通訊系統必須的一個功能模塊。如果客戶端輸入的字符串表方式需要登錄,那么服務器在接收到該信息后連接數據庫,準備從數據庫選擇昵稱和密碼。服務器接收到客戶端發送過來的號碼和密碼信息后,設定數據庫查尋條件,并執行數據庫查尋,通過比較輸入的用戶名和密碼數據庫信息來卻請用戶的登錄是否成功。以下為登陸驗證的流程圖。符合不符合登陸系統輸入信息驗證進入系統圖5 用戶登錄流程圖5.1.3 注冊處理模塊新建用戶是即時通訊工具的一個基本功能。用戶新建過程也在線程監聽函數run()中。新建用戶的過程是這樣的:首先使用Register_Customer()方法加載數據庫驅動類;然后使用dao.getUser()方法獲取數據;在獲取注冊名時,進行判斷,查看用戶名是否重復,如果重復,則向客戶端彈出提示信息,見圖6;如果不重復,服務器接收客戶端用戶發送的昵稱、密碼、用戶E-mail等信息,執行數據庫添加操作完成用戶的創建;最后向用戶反饋注冊成功信息。圖6 注冊名重復提示信息5.2 客戶端的設計與實現前一章介紹了服務器端的設計與實現,對于C/S模式的系統而言,還必須對系統的客戶端進行設計和實現。下面就來解決這樣一個問題。客戶端通過Socket與服務器建立連接。服務器與客戶都通過構造BufferedReader、PrintWriter來建立輸入流和輸出流,雙方通過該輸入流和輸出流來相互傳遞信息。只要收到客戶端的連接請求,服務器利用accept()函數返回一個新建的Socket對象,隨后客戶端向服務器發送消息,諸如注冊、登錄和查找同事等請求,服務器收到請求后,針對不同的消息處理請求。5.2.1 用戶注冊模塊當用戶向服務器端發出注冊請求后,客戶端將向服務器發送客戶傳遞的信息,諸如客戶的昵稱、性別、個人資料等信息。等服務器接收完畢后,服務器會通過hibernate框架讀取數據庫信息,并進行判斷,最后在客戶端收到服務器的反饋信息。現對部分關鍵語句進行講解。public class Register extends JFrame implements ActionListener Toolkit toolkit=Toolkit.getDefaultToolkit();JButton btnOk,btnCancel,btnClear;public Register(String ip) btnOk=new JButton(確定(O); btnOk.setMnemonic(O); btnOk.setToolTipText(保存注冊信息); btnOk.setBounds(250,135,80,25);Implement繼承于接口類時用的關鍵詞【7】,在數據接口位置使用,在這里表示類ActionListen類繼承類Register。JButton btnOk,btnCancel,btnClear。這條語句中,JButton其實是一個類,名為JButton按鈕類,它是JAVA中自帶的一種控件,當鼠標移入、移出、被點擊所定義的3個變量時,會觸發JButton類,從而執行相應的操作。如在類Register中,當鼠標點擊“確定”按鈕時,則會觸發類JButton定義的變量btnOk,并且為其賦值,進而調用setToolTipText方法,將注冊信息進行保存。而setBounds類是JAVA自帶類,他能夠設置組件位置【8】,即確定注冊窗口位置。見圖7。圖7 用戶注冊界面5.2.2 用戶登錄當用戶點擊登錄時,客戶端發起請求與服務端建立連接,登錄信息首先在客戶端做驗證,然后通過填寫的服務器IP地址申請與服務端建立連接。而在服務器端,有一個主線程專門創建SOCKET服務,等待客戶端的連接,每當客戶端發起連接的申請時,與之建立連接,并創建一個線程,將建立的連接交給這個線程處理,并將連接存入一個集合中,用于后續業務的處理。然后服務器將反序列化客戶端傳輸過來的數據,生成一個用戶對象。從中獲取登錄填寫的信息,根據用戶名和密碼在數據庫中查找數據,如果能夠找到表示登錄成功,反之,登錄不成功。最后將登錄的結果通過文本發送給客戶端發送給服務端。最后,如果通過驗證,得到一個標志,進入聊天主窗體,否則彈出登錄失敗的對話框,讓用戶重新登錄。登陸界面見圖8圖8 用戶登陸界面現對部分關鍵代碼進行講解:public void actionPerformed(ActionEvent ae)Object source=ae.getSource();if (source.equals(btnLogin) if(txtUserName.getText().equals() | pwdPassword.getText().equals() JOptionPane op1=new JOptionPane(); op1.showMessageDialog(null,用戶名或密碼不能為空); else strServerIp=txtServer.getText(); login(); 該語句表示的意思為接受用戶登陸信息,如果用戶名或者密碼為空,則彈出提示信息,如果不為空,則調用login方法。這里equals表示接受變量的值;“|”表示“或”的意思,;showMessageDialog是JAVA的自帶控件,作用是在當前界面彈出對話框;關鍵字new,是一種調用方法,表示能夠直接調用類的構造方法。5.2.3 在線用戶顯示設計用戶完成登錄后,客戶端與服務器端建立連接。連接建立成功后,客戶向服務器請求讀取在線人員名單;服務器收到該請求,開始讀取數據庫中的user表并得到同事的號碼,向客戶端發送這些信息;客戶收到服務器信息后,在主窗口顯示顯現成員的昵稱。其實現代碼如下:for (int i=0;imessobj.userOnLine.size();i+) String User=(String)messobj.userOnLine.elementAt(i); lstUserList.addItem(User); 這里采用了for循環,定義變量i,初值為0,只要i滿足;imessobj.userOnLine.size()這個條件,循環將執行一次。執行完一次循環后i的值自動加1,這里的messobj.userOnLine.size()表示在線用戶的人數,lstUserList.addItem(User)表示顯示用戶的昵稱。5.2.4 聊天信息發送與接收聊天信息的發送與接收都是通過Socket類實現的。使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;會話完成后,關閉Socket。也就是說,在服務端開啟socket服務,客戶端每一次連接成功時也都會同時創建一個線程來處理這次連接的請求,而該連接會被保存在一個集合中,直到服務結束,連接關閉,該線程也會結束,同時從連接的集合中移除該連接。(1)信息發送用戶在每次發送信息時,首先向服務器發送的是自己信息和發送對象信息,然后再通過Socket類向服務器發送信息。當然,在每次輸入信息后,輸入信息框的內容將會被清空。關鍵代碼如下: public void sendMessage() chatobj.chatUser=strLoginName; chatobj.chatMessage=txtMessage.getText(); chatobj.chatToUser=String.valueOf(cmbUser.getSelectedItem(); chatobj.whisper=chPrivateChat.isSelected()?true:false;/向服務器發送信息 trySocket toServer=new Socket(strServerIp,1001); ObjectOutputStream outObj=new ObjectOutputStream(toServer.getOutputStream(); outObj.writeObject(chatobj); txtMessage.setText(); /清空文本框 outObj.close(); catch(Exception e)其中,方法中的前三句表示系統獲取發送信息者的昵稱,發送信息內容以及發送對象的昵稱;chPrivateChat.isSelected()?true:false這是一個判斷語句,表示信息值是否為空,如果isSelected方法有值,那么將true賦給chatobj.whisper,如果為空,則賦false。在上文中,我們講到了catch有拋出異常的作用,而trycatch也是具有相同的功能,try 塊塊是需要捕獲異常的,因為文件有可能不存在,會導致程序崩潰,所以直接捕獲,也可以直接throws 出去,讓調用該方法的方法去捕獲,從而使程序能夠正常進行。此外,函數Socket(strServerIp,1001) 用來創建一個能夠進行網絡通信的套接字。參數strServerIp為通信協議的協議族,1001則為服務器IP。而outObj.writeObject(chatobj)的作用則是把調用writeObject方法,將信息發送到服務器。(2)信息輸出本即時聊天系統的信息輸出原理是將所有輸入信息通過socket類向服務器發送,然后直接從服務器中突出信息。關鍵代碼如下:Socket toServer;toServer=new Socket(strServerIp,1001);/將信息發往服務器Message messobj=new Message();messobj.username = strLoginName;ObjectOutputStream streamtoserver=new ObjectOutputStream (toServer.getOutputStream();streamtoserver.writeObject(Message)messobj);/收來自服務器的信息由于上文以對很多方法進行講解,現主要對ObjectOutputStream進行講解。ObjectOutputStream 將 Java 對象的基本數據類型和圖形寫入 OutputStream。可以使用 ObjectInputStream 讀取(重構)對象。通過在流中使用文件可以實現對象的持久存儲。如果流是網絡套接字流,則可以在另一臺主機上或另一個進程中重構對象。也就是說通過ObjectOutputStream 將toServer.getOutputStream()進行重構,從而將服務器接受的信息重構到客戶機上,最后通過streamtoserver.writeObject()方法將信息寫在客戶端上。5.3 數據庫設計在前文我們已經分析了數據庫的實現是采用了hibernate框架中的.XML映射。以下則為實現的關鍵代碼:- 其中,package=org.seler.bean表示調用該框架bean中的數據包;auto-import=true表示hibernate框架中的將映射文件實體;property表示元素定義,name表示字段名;not-null表示是否設置該字段為空;unique表示是否設置該字段為唯一值;optimistic-lock指定此屬性做更新操作時是否需要樂觀鎖定; lazy指定是否采用延遲加載及加載策略,設置為false,表示此關聯對象不采用延遲加載。6 結論眾所周知,互聯網從誕生以來,就開始影響著地球的每一個角落,給予了人類一種全新的生活方式,隨著互聯網技術的不斷發展,新興的技術也層出不窮,即時通信系統就是這么一種以聊天形式為主的廣受歡迎的互聯網技術。當然,該課題討論的即時通訊系統是定位于內部局域網,供班級內部人員使用的通訊系統。即時通信中最基本的功能就是通過計算機之間的文本數據的互換的形式實現思想的交流和溝通,它的優點是方便快捷,為人們之間創建了一種新型的、廉價的、快速的、簡便的溝通方式。首先,本系統完全按照軟件工程的瀑布模型進行開發,雖然缺少部分開發文檔,但本論文則是按照需求分析,概要設計,詳細設計,軟件的運行和測試等的結構進行安排的。其次,本即時聊天系統采用了C/S模型。服務器在C/S模型中處于一個中心地位。服務器一般同時為多個客戶提供服務,這就造成了服務器設計的復雜性。即時通訊服務器是數據中心,它是客戶活動的中介,需要同時應對眾多客戶的請求。再次,本文并沒有采用復雜的SQL,ORICLE等數據庫,而是通過hibernate框架對數據進行映射,然后利用*.hbm.xml將數據進行存儲。最后,在編寫這個聊天程序時遇到許許多多的問題,比如JAVA的圖形化界面如何編寫,該怎樣布局。這是java的一個弱項,不像VB,DELPHI等語言可以使用已有的控件。后來也在網上找到一些setBounds類,雖然調用起來比較麻煩,但是熟悉后也覺得不是那么難。經過一段時間的學習和工作,該即時聊天系統已經初具雛形,實現了網絡即時通信工具的主要功能,為實現一個嶄新的可跨平臺的Java即時聊天工具打下了基礎。目前該即時聊天系統的1.0版本已經投入試運行中。致謝為期一個學期的畢業論文(設計)已接近尾聲了,我的四年大學生涯也即將圈上一個句號。此刻我的心中卻有些悵然若失,因為那些熟悉的計科學院的恩師們和各位可愛的同學們,我們也即將揮手告別了。值此論文完成之際,心中充滿了一片感激之情,在整個論文完成的過程中得到了我的導師于永武于老師的精心指導,在此要向他致以最崇敬的感謝。于老師總是在百忙之中抽出時間來為我們解答論文設計過程中的疑惑。他循循善誘的教導和不拘一格的思路給予我無盡的啟迪。再次向于老師獻上誠摯的謝意。感謝我的舍友廖鴻,方敏同學,在論文完成的過程中是他們在生活上和學習上給予我很大的幫助和支持,在我進行畢業設計的過程中是他們不斷給我自信,如今才能順利完稿。感謝06級2班的全體成員,在這個大家庭中使我學會了寬容,忍讓,團結與互助。大家在學習上互相交流,生活上相互幫助,再次衷心的向大家說一聲謝謝。最后我要誠摯地感謝我的家人,是他們無微不至的關懷、一貫的體諒與支持,使我能在工作和學習上不斷前進,他們是我努力工作和積極生活的精神支柱。向所有關心我的親人、同學和朋友們表示深深的謝意!參考文獻1 尹治本.計算機網絡及應用教程M.成都:西南交通大學出版社.2002.8. 2熊曉敏,劉瑛,陳惠清.基于Java

溫馨提示

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

評論

0/150

提交評論