java畢業論文基于UDP協議的可靠通訊系統的設計與實現_第1頁
java畢業論文基于UDP協議的可靠通訊系統的設計與實現_第2頁
java畢業論文基于UDP協議的可靠通訊系統的設計與實現_第3頁
java畢業論文基于UDP協議的可靠通訊系統的設計與實現_第4頁
java畢業論文基于UDP協議的可靠通訊系統的設計與實現_第5頁
已閱讀5頁,還剩32頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、基于UDP協議的可靠通訊系統的設計與實現UDP是OSI參考模型中一種無連接的傳輸層協議,它提供了簡單不可靠的信息傳送服務。由于UDP的包頭包含很少的字節,它在網絡傳輸方面有很大的速度優勢。由于UDP存在傳輸可靠性差的問題,無法實現聊天系統在好友互相聊天時的可靠性傳輸。文章在細致分析UDP和TCP協議特點的基礎上,通過對TCP協議的模擬,設計出了一種新的可靠UDP協議(UDT),大大提高了數據傳榆的可靠性。本文結合Java面向對象語言特性和系統的功能需要,對本系統進行了設計與實現。該系統在用戶與服務器之間采用C/S架構。使用分層設計的思想分離出視圖層、商務邏輯層、hibernate數據庫連接層、

2、hibernate數據庫存儲層。UDT;套接字;Java;多線程;Hibernate Design and Implementation of the Reliable Communication System Based on UDPUDP is the OSI connectionless transport protocol,it provides simple unreliable transport servicesUDP has a transmission speed advantage in the network that is caused by UDP header co

3、nsists of a few fields. UDP has disadvantage of poor reliable, so it cant support the reliable transmission to this project when friends chat with each other. This paper extracts the features of UDP and TCP and proposes a new Reliable UDP(UDT)An object-oriented programming language Java, support man

4、y API , provides a great help for the realization of this chat program .In this thesis, combined with the JAVA object-oriented language feature and the actual need of this program , this Instant Message has been designed and implemented. C/S architecture is used between server and client .Using the

5、idea of the hierarchical design, this system can be separated view layer, business logic layer, Hibernate database access layer and Hibernate database storage layer.UDT; Socket ;Java; Multithread ; Hibernate目 錄 TOC o 1-3 h z u HYPERLINK l _Toc325922637 1 緒論 PAGEREF _Toc325922637 h 1 HYPERLINK l _Toc

6、325922638 1.1 課題選擇的背景 PAGEREF _Toc325922638 h 1 HYPERLINK l _Toc325922639 1.2 國內外現狀及發展趨勢 PAGEREF _Toc325922639 h 1 HYPERLINK l _Toc325922640 1.3 本文的主要工作 PAGEREF _Toc325922640 h 2 HYPERLINK l _Toc325922641 1.4 本章小結 PAGEREF _Toc325922641 h 2 HYPERLINK l _Toc325922642 2 涉及的相關技術與協議 PAGEREF _Toc325922642

7、 h 2 HYPERLINK l _Toc325922643 2.1 Java語言技術基礎 PAGEREF _Toc325922643 h 3 HYPERLINK l _Toc325922644 2.1.1 Java語言在開發和執行過程中的特點 PAGEREF _Toc325922644 h 3 HYPERLINK l _Toc325922645 2.1.2 Java語言本身的特點 PAGEREF _Toc325922645 h 3 HYPERLINK l _Toc325922646 2.1.3 Java與Hibernate整合使用訪問數據庫 PAGEREF _Toc325922646 h 6

8、 HYPERLINK l _Toc325922647 2.2 相關的協議介紹 PAGEREF _Toc325922647 h 7 HYPERLINK l _Toc325922648 2.2.1 TCP/IP協議 PAGEREF _Toc325922648 h 7 HYPERLINK l _Toc325922649 2.2.2 UDP協議(用戶數據報協議) PAGEREF _Toc325922649 h 8 HYPERLINK l _Toc325922650 2.2.3 TCP協議與UDP協議的比較 PAGEREF _Toc325922650 h 10 HYPERLINK l _Toc32592

9、2651 2.3 基于Socket的編程 PAGEREF _Toc325922651 h 11 HYPERLINK l _Toc325922652 2.4 本章小結 PAGEREF _Toc325922652 h 12 HYPERLINK l _Toc325922653 3 聊天系統的需求分析 PAGEREF _Toc325922653 h 12 HYPERLINK l _Toc325922654 3.1 即時消息的一般需求 PAGEREF _Toc325922654 h 12 HYPERLINK l _Toc325922655 3.1.1 一般即時消息格式需求 PAGEREF _Toc325

10、922655 h 12 HYPERLINK l _Toc325922656 3.1.2 可靠性需求 PAGEREF _Toc325922656 h 12 HYPERLINK l _Toc325922657 3.1.3 性能需求 PAGEREF _Toc325922657 h 12 HYPERLINK l _Toc325922658 3.2 即時消息的協議需求 PAGEREF _Toc325922658 h 13 HYPERLINK l _Toc325922659 3.3 即時消息的安全需求 PAGEREF _Toc325922659 h 13 HYPERLINK l _Toc325922660

11、 3.4 即時通訊系統需求 PAGEREF _Toc325922660 h 13 HYPERLINK l _Toc325922661 3.4.1 注冊需求 PAGEREF _Toc325922661 h 13 HYPERLINK l _Toc325922662 3.4.2 通訊需求 PAGEREF _Toc325922662 h 13 HYPERLINK l _Toc325922663 3.5 系統的用例分析 PAGEREF _Toc325922663 h 13 HYPERLINK l _Toc325922664 3.5.1 服務器端用例圖 PAGEREF _Toc325922664 h 14

12、 HYPERLINK l _Toc325922665 3.5.2 客戶端用例圖 PAGEREF _Toc325922665 h 14 HYPERLINK l _Toc325922666 3.6 本章小結 PAGEREF _Toc325922666 h 15 HYPERLINK l _Toc325922667 4 系統總體設計 PAGEREF _Toc325922667 h 15 HYPERLINK l _Toc325922668 4.1 功能模塊劃分 PAGEREF _Toc325922668 h 16 HYPERLINK l _Toc325922669 4.1.1 服務器端 PAGEREF

13、_Toc325922669 h 16 HYPERLINK l _Toc325922670 4.1.2 客戶端 PAGEREF _Toc325922670 h 16 HYPERLINK l _Toc325922671 4.2 系統的多線程設計 PAGEREF _Toc325922671 h 17 HYPERLINK l _Toc325922672 4.2.1 服務器端的多線程設計 PAGEREF _Toc325922672 h 17 HYPERLINK l _Toc325922673 4.2.2 客戶端的多線程設計 PAGEREF _Toc325922673 h 18 HYPERLINK l _

14、Toc325922674 4.3 本章小結 PAGEREF _Toc325922674 h 18 HYPERLINK l _Toc325922675 5 系統關鍵技術及實現 PAGEREF _Toc325922675 h 18 HYPERLINK l _Toc325922676 5.1 消息格式的設計與實現 PAGEREF _Toc325922676 h 18 HYPERLINK l _Toc325922677 5.1.1 客戶端消息格式的設計 PAGEREF _Toc325922677 h 18 HYPERLINK l _Toc325922678 5.1.2 服務器端的消息格式 PAGERE

15、F _Toc325922678 h 19 HYPERLINK l _Toc325922679 5.2 Hibernate數據庫設計 PAGEREF _Toc325922679 h 20 HYPERLINK l _Toc325922680 5.2.1 數據庫的選擇 PAGEREF _Toc325922680 h 21 HYPERLINK l _Toc325922681 5.2.2 數據庫表設計 PAGEREF _Toc325922681 h 21 HYPERLINK l _Toc325922682 5.2.3 Hibernate偽面向對象數據庫的設計與實現 PAGEREF _Toc3259226

16、82 h 22 HYPERLINK l _Toc325922683 5.3 客戶端好友聊天時的可靠傳輸 PAGEREF _Toc325922683 h 25 HYPERLINK l _Toc325922684 5.3.1 雙方的連接建立與關閉 PAGEREF _Toc325922684 h 25 HYPERLINK l _Toc325922685 5.3.2 發送方和接收方的設計 PAGEREF _Toc325922685 h 25 HYPERLINK l _Toc325922686 5.3.3 發送方的流量控制 PAGEREF _Toc325922686 h 26 HYPERLINK l _

17、Toc325922687 5.3.4 接收方的確認技術 PAGEREF _Toc325922687 h 26 HYPERLINK l _Toc325922688 5.4 本章小結 PAGEREF _Toc325922688 h 27 HYPERLINK l _Toc325922689 6 系統測試 PAGEREF _Toc325922689 h 27 HYPERLINK l _Toc325922690 6.1 測試方法 PAGEREF _Toc325922690 h 27 HYPERLINK l _Toc325922691 6.1.1 靜態測試與動態測試相結合 PAGEREF _Toc3259

18、22691 h 27 HYPERLINK l _Toc325922692 6.1.2 壓力測試 PAGEREF _Toc325922692 h 27 HYPERLINK l _Toc325922693 6.2 測試結果 PAGEREF _Toc325922693 h 27 HYPERLINK l _Toc325922694 7 總結與展望 PAGEREF _Toc325922694 h 28 HYPERLINK l _Toc325922695 7.1 總結 PAGEREF _Toc325922695 h 28 HYPERLINK l _Toc325922696 7.2 展望 PAGEREF _

19、Toc325922696 h 28 HYPERLINK l _Toc325922697 結束語 PAGEREF _Toc325922697 h 30 HYPERLINK l _Toc325922698 參考文獻 PAGEREF _Toc325922698 h 31 HYPERLINK l _Toc325922699 致謝 PAGEREF _Toc325922699 h 32 PAGE 33緒論自從人類有了語言之后,人與人之間的交流更為方便。二次大戰以后科學技術的迅猛發展,給我們的生活帶來了巨大的變化。人與人之間的交流不在局限于面對面或紙上的書信交流,而是更加多元化。當今世界即時聊天越來越受到人

20、們的青睞。本課題研究的是一種基于Internet網絡以及其他有線、無線網絡的實時通信方式即時聊天系統。即時通信(Instant Message)是互聯網應用的一大熱點,通過通信系統建立網絡虛擬社區,為用戶提供實時有效的溝通手段。本課題在實施的過程使用的Java語言。課題選擇的背景計算機、電信網絡快速發展的今天,即時通訊方式日益受到人們的青睞。即時通訊工具不僅解放了人們交流的距離,而且使得交流的方式更加的多元化。即時聊天工具發展的歷史并不久遠,但憑借計算機和網絡之間的相互結合。人們可以通過計算機的電信網絡實現視頻、音頻同步的交流。豐富了人們的聯系方式。1996年11月,四位以色列籍年輕人成立的一

21、家名為Mirabilis的小公司推出了第一個即時通信軟件ICQ,取意為“I seek you”,這是當時出現一款較為流行的網絡IM聊天工具。在接下來的幾年里,IM憑借一種更直接、更簡單、更便捷的方式改變了整個網絡的交流方式,在編碼、字符、圖片堆積Internet中構建了一條充滿溫情的溝通渠道。隨后的幾年伴隨著互聯網的飛速發展,國內外即時聊天系統也在不斷的發展。相繼有許多的聊天系統被人們所接受和認可。比如中國騰訊的QQ,微軟的MSN,新浪的UC,搜狐的搜Q,但還是QQ最為成功。目前互聯網上即時聊天系統種類眾多,功能也較為齊全。如果企業或者單位內部使用這些比較成熟的即時聊天系統,由于聊天對象與內容

22、部可控性,這樣企業可能會降低工作效率。該即時聊天通訊系統將自己的服務器端安裝在企業內,并且由企業內部的人員來進行管理,可以很好的解決這個問題。并且該系統是定位于企業內部網絡,解決企業或單位的溝通與系統問題,提高工作效率。企業內部的工作人員可利用該通訊系統隨時隨地發送文字消息、進行群聊、消息群發等。系統包括客戶端程序和服務器端程序,支持局域網和Intent。企業內部員工之間可以在內部網覆蓋的任何地方、時間即時交流,真正的實現企業內部協同工作。大大提高企業的辦公效率。國內外現狀及發展趨勢目前,即時聊天系統收到人們的普遍歡迎,互聯網上也推出不少相關的應用程序。目前在互聯網上受歡迎的即時通訊軟件包括Q

23、Q、MSN、AOL Instant Messenger、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ等。通常IM服務會在使用者通話清單(類似電話簿)上的某人連上IM時發出信息通知使用者,使用者便可據此與此人透過Internet或網絡開始進行實時的IM文字通訊。除了文字外,在頻寬充足的前提下,大部份IM服務事實上也提供了視訊通訊的能力。實時傳訊與電子郵件最大的不同在于不用等候,不需要每隔兩分鐘就按一次“傳送與接收”,只要兩個人都在在線,就能像多媒體電話一樣,傳送文字、檔案、聲音、影像給對方,只要有網絡,無論對方在天涯海角或是雙方隔得多遠都沒有

24、距離。“中國即時通訊市場將發生翻天覆地的變化,當然并不是說誰可以把QQ干掉,QQ依然會占領很大的市場份額,但是絕對不是像現在這樣的一家獨大的壟斷性份額。我認為這個時間很快就會來臨,或許就在今年底或明年。”前雅虎中國總裁周鴻祎曾如此充滿期望。2005年Ebay以數億美金的代價收購了做語音即時通訊軟件的Skype,此時Skype并沒有實現盈利。之前,搜索引擎巨Google也開發了自己的語音即時通訊聊天工具Google Talk。國際巨頭的動作預示著,即時通訊公司正在向多元化經營和通訊語音的方向發展。同樣的變化也發生在中國,只不過故事的版本有了變化。2004年微軟的MSN進中國時,簽下了數家做內容的

25、網站進行門戶式的擴張;而騰訊則公開宣布要靠即時通訊多年積攢的用戶數做基礎,向門戶和C2C電子商務方向進軍。新浪的UC則在向視頻增值服務的方向向前發展。即時通訊產業的明天同樣充滿了變數。隨著互聯網的普及和帶寬技術的發展,即時聊天領域競爭依然十分激烈。雖然互聯網的應用不斷的推陳出新,像微博、社交網站的出現,在一定程度上對即時聊天有一些沖擊,但是完全替代即時聊天是不可能的。人們渴望在現在即時聊天的基礎上,即時聊天能不斷的完善與滿足用戶的需要,使之更為出色和富有競爭力。本文的主要工作本文在充分了解時下流行的即時聊天系統的基礎上,針對企業對聊天的可控性的要求,在設計上采用的是面向對象的組建式設計方法,詳

26、細介紹系統的分析與設計。本文則主要介紹,用戶之間的信息同步,用戶之間可以進行信息交互、溝通。使用即時通訊時,要保證當前客戶端計算機登陸指定服務器,在這里可以進行好友的添加,并與對方進行溝通,發送信息、文件等。本章小結本章簡要描述該課題的選題背景、即時通訊系統的國內外發展狀況與趨勢、論文的主要內容。涉及的相關技術與協議為了保證課題能正常實施,先來分析一下課題所需要的相關技術和協議。Java語言技術基礎經過認真的討論分析,綜合各種計算機高級語言的特征和適應范圍,最終決定選擇純面向對象的Java語言來完成畢業論文的設計,下面就技術可行性方面,對Java語言作簡要介紹。Java的歷史要追溯到1991年

27、,由Patrick Naughton及其伙伴James Gosling 帶領SUN公司的工程師小組想要設計一種小型的計算機語言,主要用于像有線電視轉換盒這類的消費設備。由于這些消費設備的處理能力和內存都很有限,所以語言必須非常小且能夠生成非常緊湊的代碼。另外,由于不同的廠商會選擇不同的中央處理器,因此這種語言的關鍵是不能與任何特定的體系結構捆綁在一起。這種要求代碼小、緊湊、且平臺無關,是Java語言設計的初衷。1996年初,SUN公司發布了Java第一版本,就引起了人們的極大興趣。雖然在在前兩個版本中有很大的局限性,在隨后的幾個版本的不斷完善后,現在Java語言在業界起著舉足輕重的作用。Jav

28、a是它以C+為基礎,但是卻是一個全新的軟件開發語言。Java語言具有的簡單、面向對象等11大特色 REF _Ref323757239 r 1。Java語言在開發和執行過程中的特點Java是解釋型的高級編程語言 REF _Ref323758230 r 2,所以Java程序的開發通常需要經過編寫源程序、編譯生成字節碼和運行三個過程。這里要提到,Java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。Java編譯程序將Java源程序翻譯為JVM可執行代碼字節碼。這一編譯過程同C/C+的編譯有些不同。當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬件平臺運行而產生的。因此,在編譯過程中

29、,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。Java編譯器卻不將對變量和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在字節碼中,由解釋器在運行過程中創立內存布局,然后再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。Java的另外一個比較重要的概念就是Java虛擬機:Java虛擬機(JVM)是可運行Java代碼的假想計算機。只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任何Java代碼能夠在該系統上運行。運行JVM字節碼的工作是由解釋器來完成的。解釋執行過程分代碼的

30、裝入、代碼的校驗和代碼的執行三部進行。JVM的設計目標是提供一個基于抽象規格描述的計算機模型,為解釋程序開發人員提很好的靈活性,同時也確保Java代碼可在符合該規范的任何系統上運行。JVM對其實現的某些方面給出了具體的定義,特別是對Java可執行代碼,即字節碼(Bytecode)的格式給出了明確的規格。Java語言本身的特點Java是一種跨平臺,適合于分布式計算環境的面向對象編程語言 REF _Ref323757239 r 1。具體來說,它具有如下特性:簡單性、面向對象、網絡性、解釋型、健壯性、安全性、體系結構獨立、可移植性、高性能、多線程、動態性等。下面將重點介紹Java語言的簡單性、面向對

31、象、體結構中立性、可移植性、多線程、可靠和安全等特性。簡單性Java語法就是C+語法的一個“純凈”版本。Java剔除了C+中許多很少使用、難以理解、易混淆的特性。這里沒有頭文件、指針運算(甚至指針語法)、結構、聯合、操作重載符、虛基類等等。簡單的另外一個方面是小,可支持開發能夠在小型機器上獨立運行的軟件。基本的解釋器以及類支持大約僅為40kb,再加上基礎的標準類庫和對線程的支持大約需要增加175kb。面向對象性面向對象程序設計是當今主流的程序設計范型。面向對象的程序設計是由對象組成的,每個對象包含對用戶公開的特定功能部分和隱藏的實現部分。其實現實世界模型的自然延伸。現實世界中任何實體都可以看作

32、是對象。對象之間通過消息相互作用。另外,現實世界中任何實體都可歸屬于某類事物,任何對象都是某一類事物的實例。如果說傳統的過程式編程語言是以過程為中心以算法為驅動的話,面向對象的編程語言則是以對象為中心以消息為驅動。它將重點放在數據(即對象)和對象的接口上。面向對象始終關注的是所要抽象的對象,然后才是實現的方法。在過去的30年里,面向對象已經證明了自身的價值,一種現代的程序設計技術簡直讓人難以置信。Java的面向對象特性與C+旗鼓相當。Java與C+的主要不同在于多繼承,在Java中,取而代之是簡單的接口概念,以及Java的元類(metaclass)模型。封裝、繼承、多態是面向對象語言的三大特性

33、。Java作為面向對象編程語言很好的支持這三種特性。現實世界的對象均有屬性和行為,可以映射到計算機程序上,屬性表示對象的數據,行為表示對象的方法。封裝形式看只不過是將數據和行為組合在一個包中,并對對象的使用者隱藏了數據的實現方式。對象的數據稱為實例域(instance fields),操縱數據的過程稱為方(method)。繼承讓人們可以在已存在類的基礎上構造一個新類。繼承已存在的類就是復用這些類的方法和域。在此基礎上,可以添加一些新的方法和域,以滿足新的需求。這是Java程序設計中的一項核心技術。多態是一種運行期行為,不是編譯期的行為,是指一個對象變量可以引用多種實際類型的現象。在運行時能自動

34、地選擇調用哪個方法的現象。體系機構中立性編譯器會為Java代碼生成一個體系結構中立的目標文件格式,這是一種編譯過的代碼,只要有Java運行時系統,就可以在許多處理器上運行。Java編譯器通過生成與特定平臺計算機無關的字節碼指令來實現這一特性。精心設計的字節碼不僅可以很容易地在任何機器上解釋執行,而且還可以迅速地翻譯成本地機器的代碼。解釋字節碼是依賴于虛擬機的,虛擬機可以檢測指令序列,以增強期安全性。有些程序還以快速地生成字節碼,并動態增強所運行程序的處理能力。可移植性與C和C+不同,Java規范沒有“依賴具體實現”的地方。基本的數據類型的大小以及有關的算法都做了明確的說明。例如,Java中的i

35、nt永遠為32位的整數,而在C/C+中,int可能是16位整數、32位整數,也可能是編譯器提供商指定的其他大小。惟一的限制只是int類型的大小不能低于short int,并且不能高于long int。在Java中,數據類型具有固定的大小,這消除了代碼移植時令人頭痛的主要問題。二進制數據以固定的格式進行的存儲和傳輸,消除了字節順序的困擾。字符串是用標準的Unicode格式存儲的。多線程通常,一個程序可以同時執行多個任務時,每個任務稱為一個線程。線程可以帶來更好的交互響應和實時行為。與進程相比較線程是輕量級的進程,創建、撤銷一個線程比啟動新進程的開銷要小的多。Java處理多線程非常便捷。只要操作系

36、統支持,Java中的線程就可以利用多個處理器。Java在兩方面支持多線程。一方面,Java環境本身就是多線程的。若干個系統線程運行負責必要的無用單元回收,系統維護等系統級操作;另一方面,Java語言內置多線程控制,可以大大簡化多線程應用程序開發。Java提供了一個類Thread,由它負責啟動運行,終止線程,并可檢查線程狀態。Java的線程還包括一組同步原語。這些原語負責對線程實行并發控制。利用Java的多線程編程接口,開發人員可以方便得寫出支持多線程的應用程序,提高程序執行效率。必須注意地是,Java的多線程支持在一定程度上受運行時支持平臺的限制。例如,如果操作系統本身不支持多線程,Java的

37、多線程特性可能就表現不出來。可靠性與安全性Java的設計目標之一在于使得Java編寫的程序具有多方面的可靠性。Java投入了大量的精力進行早期的問題檢測、后期動態的檢測,并消除了有出錯傾向的狀態。Java和C+最大的不同在于Java采用指針模型可以消除重寫內存和損壞數據的可能性。Java編譯器能夠檢測許多在其他語言中僅在運行時刻才能夠檢測出來的問題。Java是一種沒有顯式指針的語言,但具備指針的能力,如鏈表。Java是絕對安全的,它能夠永遠存取一個“壞的”指針,造成內存分配的錯誤,也不必防范內存泄露。Java適用于網絡/分布式環境。為了達到這個目的,在安全方面投入了很大的精力。使用Java可以

38、構建防病毒、防纂改的系統。Java能夠防范各種襲擊,其中包括:運行時的堆棧溢出。如蠕蟲等病毒常用的襲擊手段;在自己的內存空間之外破壞內存;未經授權的讀寫文件。Java還有數字簽名類的概念。通過數字簽名類,可以確定類的作者。如果信任這個類的作者,這個類就可以在機器上擁有更多的權限。Java與Hibernate整合使用訪問數據庫ORM數據庫操作技術ORM是一種在關系型數據庫上構造面向對象數據存儲的技術,這種技術又被稱為偽面向對象數據庫技術。該技術提供一個軟件框架,透明的實現對象保存與維護。在底層上,對象保存時,對象能拆分成不同的數據記錄,并規則地保存在關系型數據庫中;而數據的檢索式,再實現由關系型

39、數據庫中的記錄到特定對象的裝配工作。ORM模塊作用示意圖如2-1所示。圖21偽面向對象數據庫系統結構示意圖RDB為關系型數據庫,DBMS是關系型數據庫管理系統,兩者整體上構成傳統上的關系數據庫系統 REF _Ref325900592 r 3。ORM是對關系映射模塊,該模塊和傳統的關系型數據庫系統作為整體形成偽面向對象數據庫系統。Hibernate簡介本系統采用了Hibernate的ORM模塊,通過該模塊可以為多數主流關系型數據庫,如Oracle、MySQL、SQL Server等,提供方便的面向對象操作方法。此模塊只需要打包開發的應用軟件中,不需要在數據庫上安裝,應用軟件在運行過程中會使用該模

40、塊操作數據庫。 Hibernate本質上也是一種基于JDBC的數據庫操作技術。它通過JDBC的封裝,屏蔽了JDBC API 的操作細節,提供一種方便的面向對象數據庫操作接口。它實現了面向對象操作與面向關系操作的轉變,將應用軟件提出的面向對象數據庫操作請求,轉變為關系型的SQL語句,然后對數據庫進行操作,并將數據庫返回結果封裝成適當的對象,返回作為數據使用者的應用軟件。圖2-2演示了Hibernate的操作原理。圖22 Hibernate核心作用示意圖Hibernate的核心作用有兩個方面:首先將面向對象的相應概念對應翻譯成關系型數據庫中的概念,例如將對象翻譯成表的記錄:將類翻譯成數據庫中的表;

41、將類和類間的關聯關系翻譯成為表和表間的關系。其次Hibernate承擔著將面向對象操作翻譯成SQL語句為標準的關系型操作。XMLXML是可擴展標記語言,一種非常有用的描述結構化信息的技術 REF _Ref325901157 r 4。XML工具使處理和轉化信息十分容易。只需要在特定的領域標準和代碼庫就能有效地使用XML。XML與Java配合的相當好。從20世紀90年代末以來,IBM ,Apache和其他許多公司一直在幫助開發用于XML處理的高質量Java庫。Sun公司從JDK SE 1.4 開始將大部分重要的代碼庫都整合到了Java平臺的標準版中。此外也有一些組織或個人開發出了一些第三方類庫,使

42、XML的解析和創建都十分的簡單易行。比如Jdom、dom4j等,都是非常實用的類庫,給處理XML帶來了很大的幫助。XML文件的格式非常直觀,它與HTML文件非常相似。XML和HTML是標準通用語言的衍生語言。只不過XML語言對語法的要求給位嚴格,并且其中的元素可以自己定義非常的靈活與方便。要處理XML文檔,就要先解析(parse)它。解析器一種程序,它讀入一個文件,確認這個文件具有正確的格式,然后將其分解稱為各種元素,是的程序員能夠得到這些元素。Java庫提供了兩種XML解析器:像文檔對象模型(DOM)解析器這樣的樹形解析器(tree parser),它們將讀入的XML文檔轉換成為樹結構。像用

43、于XML的簡單API(Simple API for XML,SAX)解析器這樣的流機制解析器,它們在讀入XML文檔時生成相應的事件。除了Java庫中提供的解析器,還有現在比較流行的第三方解析器,如jdom、dom4j等,這些類庫能讓程序員以更加面向對象的方式去解析XML文檔,程序員只要知道XML中相應的格式,就可以解析出文檔的內容,同樣也是程序員創建XML中的元素更加的方便與快捷,大大提高了開發效率。相關的協議介紹TCP/IP協議TCP:Transmission Control Protocol 傳輸控制協議TCP是一種面向連接(連接導向)的、可靠的、基于字節流的運輸層(Transport l

44、ayer)通信協議 REF _Ref325901325 r 5。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。TCP作用在因特網協議族(Internet protocol suite)中,TCP層是位于IP層之上,應用層之下的運輸層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。應用層向TCP層發送用于網間傳輸的、用8位字節表示的數據流,然后TCP把數據流分割成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳送單元(MTU)的限制)。之后TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體的T

45、CP層。TCP為了保證不發生丟包,就給每個字節一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據(假設丟失了)將會被重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算和校驗。首先,TCP建立連接之后,通信雙方都同時可以進行數據的傳輸,其次,它是全雙工的;在保證可靠性上,采用超時重傳和捎帶確認機制。在流量控制上,采用滑動窗口協議,協議中規定,對于窗口內未經確認的分組需要重傳。在擁塞控制上,采用廣受好評的TCP擁塞控制算法(也稱AIMD算法

46、),該算法主要包括三個主要部分:加性增、乘性減、慢啟動對超時事件做出反應。UDP協議(用戶數據報協議)UDP協議簡介UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據包協議,是 OSI 參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務 REF _Ref325901325 r 5。它是IETF RFC 768是UDP的正式規范。用戶數據包協議UDP是OSI參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。UDP 協議基本上是IP協議與上層協議的接口。UDP協議適用端口分別運行在同一臺設備上的多個應用程序。簡介UDP協議的全

47、稱是用戶數據包協議,在網絡中它與TCP協議一樣用于處理數據包,是一種無連接的協議。在OSI模型中,在第四層傳輸層,處于IP協議的上一層。UDP有不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是說,當報文發送之后,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數據的網絡應用。包括網絡視頻會議系統在內的眾多的客戶/服務器模式的網絡應用都需要使用UDP協議。UDP協議從問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但是即使是在今天,UDP仍然不失為一項非常實用和可行的網絡傳輸層協議。與所熟知的TCP(傳輸控制協議)協議一樣,UDP協議直接位于

48、IP(網際協議)協議的頂層。根據OSI(開放系統互連)參考模型,UDP和TCP都屬于傳輸層協議。UDP協議的主要作用是將網絡數據流量壓縮成數據包的形式。一個典型的數據包就是一個二進制數據的傳輸單位。每一個數據包的前8個字節用來包含報頭信息,剩余字節則用來包含具體的傳輸數據。使用UDP在選擇使用協議的時候,選擇UDP必須要謹慎。在網絡質量令人不十分滿意的環境下,UDP協議數據包丟失會比較嚴重。但是由于UDP的特性:它不屬于連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如我們聊

49、天用的ICQ和QQ就是使用的UDP協議。UDP報頭UDP報頭由4個域組成,其中每個域各占用2個字節,具體如下:源端口號目標端口號數據報長度校驗值UDP協議使用端口號為不同的應用保留其各自的數據傳輸通道。UDP和TCP協議正是采用這一機制實現對同一時刻內多項應用同時發送和接收數據的支持。因為聊天期間一般對數據的可靠性要求不高,所以在這里用UDP協議。UDP協議在Java編程中的應用Java中用于無連接的數據報通信的類有兩個:DatagramPacket類和DatagramSocket類 REF _Ref325901485 r 6。其中DatagramPacket類用于讀取數據等信息,Datagr

50、amSocket類用于實現數據報的發送和接受過程。現在主要介紹一下DatagramPacket類與DatagramSocket類。DatagramPacket類的構造函數有兩個:public DatagramPacket(byte buf,int length);public DatagramPacket(byte buf,int length,InetAddress addr,int port);第一個是用來創建接收數據報的對象,它的兩個參數分別代表接收數據報的數據部分的字節數組和所要接收的數據報的長度;DatagramPacket類的第二個構造函數用來創建發送給遠程系統的數據報,它的第一個

51、參數buf是存放欲發送的編碼后的報文的字節數組,第二個參數length指明字節數組的長度,即數據報的18大小,第三個參數指定所發送的數據報的目的地,其接收者的IP地址,最后一個參數port標志本數據報發送到目標主機的哪個端口。DatagramSocket類有三個構造函數:public DatagramSocket ();public DatagramSocket(int port);public DatagramSocket(int port ,InetAddress localAddr);DatagramSocket類有三個構造函數,第一個用于創建一個數據報Socket并將它連接在本地主機的

52、任何一個可用的端口上;第二個構造函數在指定的端口處創建一個數據報Socket對象;第三個構造函數用于在多IP地址主機上創建數據報Socket,它的第二個參數具體指明使用哪個IP地址。這三個構造函數都拋出IOException異常,用來控制在創建DatagramSocket類對象時可能產生的異常情況,如下:public synchronized void receive(DatagramPacket p)throws IOException;public void send(DatagramPacket p)throws IOException。receive()和send()是Datagram

53、Socket類中數據報套接字用來實現數據報傳送和接收的兩個重要方法。其中receive()方法將使程序的線程一直處于阻塞狀態,直至從當前Socket中接收到數據報文、發送者等信息,這些接收到的信息將存儲在receive()方法的參數DatagramPacket對象p的存儲機構中。需要注意的是由于數據報是不可靠的數據通信方式,receive()方法不一定能讀到數據,為防止線程死掉,應該設置超時參數(timeout)。Send()方法將其參數DatagramPacket對象p中包含的數據報文發送到所指定的IP地址主機的指定端口。這兩個方法都可能產生輸入/輸出異常,所以都拋出IOException異

54、常。然后,再介紹一下UDP的編程實現數據報的發送過程可簡單描述為如下的步驟:創建DatagramPacket對象,使其中包含如下的信息:要發送的數據;數據報分組長度;發送目的地的主機IP地址和目的端口號;在指定的或可用的本機端口創建DatagramSocket對象;調用該DatagramSocket的send()方法,以DatagramPacket對象為參數發送數據報。數據報的發送過程可簡單表述為如下的步驟:創建一個用于接收數據報的DatagramPacket對象,其中包含空白數據緩沖區和指定數據報分組長度;在指定的或可用的本機端口創建DatagramSocket對象;調用DatagramSo

55、cket對象的receive()方法,以DatagramPacket對象為參數接收數據報,接收到的信息有:收到的數據報文內容;發送端的主機IP址;發送端主機的發送端口號。TCP協議與UDP協議的比較分析可知,TCP協議比UDP協議復雜得多,現在從協議的應用范圍說明他們的使用范圍。TCP協議與UDP協議特點比較TCP協議是一種面向連接的協議,而UDP協議是無連接的協議。這其中的區別在于:第一,TCP協議是以連接作為協議數據的最終目標的。UDP協議則是以目標端口作為協議數據的最終目標。因此,TCP的協議端口是可以復用的,UDP協議的端口在同一時間則只能為一個應用程序所用。第二,一個連接是由兩個端點

56、構成的。要使用TCP進行通信必須先在通信雙方之間建立連接,連接的兩端必須就連接的一些問題進行協商(如最大數據段長度、窗口大小、初始序列號等),并為該連接分配一定的資源(緩沖區)。UDP協議則不需要這個過程,可以直接發送和接受數據。TCP協議提供的是可靠的傳輸服務,而UDP協議提供的是不可靠的服務。使用不可靠的服務進行數據傳輸時,數據可能會丟失、失序、重復等。而可靠的服務服務能保證發送方發送數據能原樣到達接收方。TCP協議提供的是面向字節流的服務。應用程序只需要將要傳輸的數據以字節流的形式提交給TCP協議,在連接的另一端,數據以同樣的字節流順序出現在接收程序中,而UDP協議的傳輸單位是數據塊,一

57、個數據塊只能封裝在一個UDP數據包中。TCP協議與UDP協議應用的比較根據上面的分析,現在來看看兩種協議適合于哪些場合。因為TCP協議提供了可靠的面向字節流的服務,而且有一套的高效的機制保證數據的高效傳輸,所以對于有大量數據需要進行可靠傳輸的應用是很適合的,因為應用程序不需要關心如何保證數據傳輸的可靠性,如何進行超時重發等。這種應用的典型例子就是文件傳輸協議(FTP)。由于TCP協議要先建立連接之后才能進行通信,而連接的建立過程需要一定的時間。所以如果應用程序只有少量數據需要傳輸則不適合使用TCP協議,因為連接建立的開銷大于其方便性的優點。但對于雖然數據量少但需要時間較長且可靠性要求高的應用T

58、CP也是比較適合的。Telnet就是這種應用的一個例子。實時應用不管數據量大小,不管對可靠性要求高低都不適合使用TCP協議,因為TCP協議對數據的傳輸有相應的程序,只有前面的傳輸成功才會開始后面的數據傳送傳送。另外,由于TCP協議是面向連接的,一個連接必須且只能有兩個端點。所以對于多個實體間的多播式的應用無法使用TCP協議進行通信,因為對于n個實體間的通信需要n(n-1)/2個連接。對于不適合使用TCP協議的應用就只能使用UDP協議了,使用UDP協議進行通信時應用程序必須自己處理下列問題。應用程序必須自己提供機制來保證可靠性。應用程序必須有自己的超時重發機制、數據失序的處理、流量控制等。當然對

59、于一些可靠性要求不高的應用可以不用這些機制,但通常都需要區分數據的先后關系。應用程序必須機自己處理大塊數據的分割,以讓其能封裝在一個UDP數據包中。在接收方還必須再將再次將分割的數據進行重組。綜上,可以知道,在設計基于網絡的即時通訊系統時,比較適合使用UDP協議。基于Socket的編程現在來介紹一下Socket編程。從概念上理解,Socket是網絡編程中最常見的C/S模式,也是即時通訊工作的基礎。以該模式編程時,服務器端有一個進程或多個進程在指定的端口等待客戶來連接,如果一旦連接成功,就按照設計的數據交換方法和格式進行數據傳輸。客戶端向服務器端提出連接請求,連接之后進行通信。Socket是一種

60、用于表達兩臺機器之間連接終端的軟件抽象。對于一個給定的連接,在每臺計算機上都有一個Socket,可以想象一條虛擬的電纜工作在兩臺機器之間,電纜插在兩臺機器的Socket上。當然,物理硬件和兩臺機器之間的“電纜”這些連接裝置都是未知的、抽象的,所有目的就是為了不必了解更多的細節。簡單說,一臺計算機上的Socket同另外一臺計算機通話創建一個通信信道,程序員可以用這個信道在兩臺計算機之間發送數據。Java Socket的類型有兩種,在編寫通訊工具時均有它們的用處。TCP Socket:由Socket類實現。UDP Socket:由DatagramSocket類實現。TCP和UDP扮演著同樣的角色,

溫馨提示

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

評論

0/150

提交評論