2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)設計</b></p><p><b>  摘 要</b></p><p>  本文設計討論了Socket機制,闡述了使用Java語言編寫基于客戶/服務器模式的網絡通訊程序方法。服務器的一個必需機能,就是能對多個客戶的請求同時做出響應。利用Java 的Socket 機制和多線程機制進行多用戶的Client

2、/Server網絡程序設計。Socket是基于 TCP/IP的網絡上運行的兩個程序間雙向通訊的一種連接機制 Java.net包中包含Socket類,用以快速地開發(fā)網絡通信程序。在TCP/IP協(xié)議體系結構的基礎上,分析了網絡通信原理,結合Socket 總結出網絡通信編程的基本模型,介紹Java的網絡編程實現。主要是對Socket類和Server Socket類的調用。</p><p>  Socket類主要實現客戶

3、端套接字(也可以就叫“套接字”)。套接字是兩臺機器之間的通信端點。套接字的實際工作由 SocketImpl 類的實例執(zhí)行。</p><p>  Server Socket類類實現服務器套接字。服務器套接字等待請求通過網絡傳入。它基于該請求執(zhí)行某些操作,然后可能向請求者返回結果。服務器套接字的實際工作由 SocketImpl 類的實例執(zhí)行。</p><p>  通過對網絡通信編程知識的掌握和

4、運用Java語言來實現一種簡單的網絡棋牌室平臺,主要包括一種游戲和聊天功能。</p><p>  關鍵詞:Java Socket;網絡編程;套接字;流套接字</p><p><b>  ABSTRACT</b></p><p>  This article discussed the socket mechanism, and elaborat

5、ed how to write the java program based on the customer/server pattern. Socket is one of the two-way communication’s end between two procedures that are operated on the network based on TCP/IP. Java.net bag includes Scoke

6、ts, which is used to develop the network communication procedure fast. One of the necessary functions of severs is to respond to multi-users simultaneously. The paper gives an introduction of the client/server network pr

7、oce</p><p>  Socket class implements client sockets (also called just "sockets"). A socket is an endpoint for communication between two machines. The actual work of the socket is performed by an in

8、stance of the SocketImpl class. </p><p>  ServerSocket class implements server sockets. A server socket waits for requests to come in over the network. It performs some operation based on that request, and t

9、hen possibly returns a result to the requester. The actual work of the server socket is performed by an instance of the SocketImpl class. </p><p>  Through predominate the knowledge of network communication

10、programming and use the language of Java to implement a simple flat roof of net chess room, the mostly contain a sort of game and a function of chat.</p><p>  Key words:Java Socket; network programming; sock

11、et; stream socket</p><p><b>  目 錄</b></p><p><b>  1 引言1</b></p><p><b>  2 概述2</b></p><p>  2.1 問題的提出2</p><p> 

12、 2.1.1 當前網絡棋牌平臺的發(fā)展概況2</p><p>  2.1.2 網絡棋牌室平臺的繼續(xù)發(fā)展2</p><p>  2.2 解決方案3</p><p>  2.3 開發(fā)工具和平臺3</p><p>  2.3.1 面向對象程序概述3</p><p>  2.3.2 利用Java語言進行網絡

13、編程的優(yōu)勢4</p><p>  2.3.3 Socket的概述5</p><p><b>  3 系統(tǒng)分析9</b></p><p>  3.1 系統(tǒng)可行性9</p><p>  3.2 系統(tǒng)應達到的標準9</p><p>  3.3 網絡棋牌友游戲平臺工作原理9</

14、p><p>  4 系統(tǒng)模塊設計11</p><p>  4.1 模塊組織圖11</p><p>  4.2 Socket流程圖12</p><p>  4.3 模塊功能介紹13</p><p>  5 詳細設計15</p><p>  5.1 通信技術15</p>

15、;<p>  5.1.1 C/S模式15</p><p>  5.1.2 Java中的網絡編程15</p><p>  5.1.3 Java在Client/Server 網絡中的應用16</p><p>  5.1.4 Java套接字編程主要類和函數18</p><p>  5.1.5 套接字編程的系統(tǒng)流程2

16、0</p><p>  5.2軟件界面設計21</p><p>  5.3 模塊分析22</p><p>  5.3.1 服務器框架模塊22</p><p>  5.3.2 服務器信息顯示模塊23</p><p>  5.3.3 服務器控制模塊26</p><p>  5.3.

17、4 客戶端框架模塊27</p><p>  5.3.5 游戲運行模塊28</p><p>  5.3.6 游戲控制模塊30</p><p>  5.3.7 用戶聊天模塊31</p><p>  5.3.8 用戶信息模塊32</p><p>  6 調試與測試34</p><p

18、>  6.1 調試中遇到的主要問題34</p><p>  6.2 測試中遇到的主要問題34</p><p><b>  結論35</b></p><p><b>  致謝36</b></p><p><b>  參考文獻37</b></p>

19、<p><b>  1 引言</b></p><p>  網絡棋牌游戲平臺在在目前的休閑游戲市場上有著很大份額,給用戶提供一個相互交流學習的平臺,也是目前大多數網民娛樂的主要方式。</p><p>  而時下,無論是網絡游戲還是單機游戲,真正適合中小學生玩的具有寓教于樂意義的游戲可謂少之又少,且后繼乏力。而血腥暴力游戲對青少年的過度侵蝕,則在很大程度上成為

20、引發(fā)近來青少年社會問題的直接誘因之一。但一味的封堵青少年玩游戲近乎不可能,多年前禁止青少年逗留三室兩廳的成效不太理想的情景,如今還歷歷在目。唯一可取之法就是開源節(jié)流,以大禹之“導”代替鯀之“堵”,盡可能的將黃色暴力游戲,這一對青少年身心健康有極大影響的洪水猛獸的巨大破壞力消弭無形。在這種形式下,涉足教育的網絡游戲便應時而生,成為了一個熱門話題。在當今如此盛行網絡游戲的時代,教育網游的誕生不能不說是一個絕好的切入點。</p>

21、<p>  因此網絡棋牌游戲就更適合于教育網游。與一般傳統(tǒng)的角色扮演類游戲相比網絡棋牌游戲的開發(fā)更適合于如今網游的發(fā)展趨勢,使得更多的人從事于網絡棋牌游戲平臺的開發(fā),從另一方面更可以使如今的青少年遠離一些血腥暴力游戲所帶來的危害。益智休閑類游戲不僅滿足青少年對游戲的需要,也是一中促進智力發(fā)展的手段。</p><p>  用Java語言對本次對網絡棋牌游戲平臺的設計可以比較深入的了解Java的Socke

22、t網絡編程,對客戶端和服務器的設計更能對兩臺主機之間的連接的Socket進行七項基本的操作如:</p><p>  連接遠程機器、發(fā)送數據、接收數據、關閉連接、綁定端口、監(jiān)聽入站數據,在所綁定端口上接收來自遠程機器的連接。</p><p>  主要研究的內容是使用JAVA Network API操縱套接字和對多種API的調用來設計服務器和客戶端的界面設計。</p><p

23、>  準備解決的問題是客戶間的通信和一種簡單游戲的實現。</p><p><b>  2 概述</b></p><p>  2.1 問題的提出</p><p>  由于國內的軟件開發(fā)的起步晚于國外,導致國內的網絡游戲的平臺開發(fā)都依賴于國外的支持,隨著時間的推移技術的發(fā)展使得國內的軟件有了大幅度的提升。國內網絡游戲市場處于高速發(fā)展階段,

24、市場規(guī)模與用戶數都高速增長。一億多的互聯網用戶上網的最主要動機是休閑娛樂,而網絡游戲是休閑娛樂的主要形式。網絡游戲是以互聯網為依托,可以使用不同的游戲終端、多人同時參與的游戲活動。網絡游戲有多種類型,按照游戲內容架構可以分為角色扮演類(MMORPG)、休閑類(包括動作類、經營類、棋牌類)和益智類。和其它網絡游戲相比,線上棋牌娛樂平臺無論是在用戶基數,用戶穩(wěn)定忠實性上,還是在提供的產品服務上,都有顯著的優(yōu)勢和區(qū)別。游戲的發(fā)展還是隨著對市場

25、的適應,教育網游是時下比較提倡的一種方式從而休閑游戲平臺的設計就變的有意義,提出網絡棋牌室平臺的設計和實現的課題。</p><p>  2.1.1 當前網絡棋牌平臺的發(fā)展概況</p><p>  國內在網絡棋牌游戲平臺的開發(fā)道路上,作為我國第一家棋牌類游戲網站,聯眾公司有一定的代表性。聯眾是中國第一個完全以棋牌游戲競技為經營核心的網站。三年前,國內的用戶只能到國外的網站上才能玩到在線棋牌

26、游戲,只能接受非民族化的游戲服務。聯眾的出現填補了這個空白,徹底改變了這種狀況,開創(chuàng)了第一個繼承發(fā)揚中國文化特色的互聯網游戲。目前國內的棋牌游戲平臺包括QQ游戲、聯眾、中游,以及近來收歸盛大旗下的邊鋒,全國過億的在線棋牌游戲玩家當中,幾乎絕大部分都分布在此幾家的游戲平臺之上,每日的黃金時段里,這幾大平臺的同時在線人數已達到數百萬之巨。他們都形成了較為成熟的贏利模式,如網絡廣告、與電信供應商分成、會員制度、產品銷售、電子商務、舉辦競賽及收

27、費游戲等。</p><p>  2.1.2 網絡棋牌室平臺的繼續(xù)發(fā)展</p><p>  從前,在對平臺的設計上實現的功能只是完成簡單的一種網絡棋牌游戲對弈和聊天,而如今的網絡平臺都講究更多的交流和互動性,特別在對游戲的設計上更多的是針對地區(qū)性的棋牌游戲的設計來吸收更多的地方用戶。從總體的調查上來看以前的棋牌游戲都過多的基于大眾方面來對游戲的設計,現在更多的投入就在于對游戲設計的針對性。

28、從用戶的方面看來用戶對自己所在地方的有地方特色的游戲的興趣度遠遠高于一般的游戲規(guī)則?,F在各家棋牌游戲平臺公司都在吸收更多的用戶來獲得更多的盈利,因此網絡棋牌的發(fā)展越來越趨進于多元化地方化,平臺上所能提供的服務也在不斷的完善。</p><p><b>  2.2 解決方案</b></p><p>  要開發(fā)一個簡單功能實現的網絡棋牌室平臺,具有一種游戲的實現和達到用戶

29、間交流的目的,各種控鍵都比較容易使用。</p><p>  第一、服務器設計:用Java中各種類的調用完成框架的設計,所擁有的功能則是能夠完成一些信息的輸出主要包括本地的IP地址用戶登入的信息和公共聊天的內容,在控制的按鍵上則有清除顯示、服務器狀況、關閉服務器選項。</p><p>  第二、客戶端設計:用Java中各種類的調用完成框架的設計,主界面上有四塊面版包括userpad、chat

30、pad、chesspad、controlpad、inputpad。用來實現連接服務器、創(chuàng)建游戲、加入游戲、聊天等功能。</p><p>  第三、通過Java網絡編程中的socket編程來實現服務器和客戶端的通訊,從而實現一中平臺的設計,來滿足用戶間的交流和對弈。</p><p>  2.3 開發(fā)工具和平臺</p><p>  JCreator 是一個Java程序

31、開發(fā)工具,也是一個Java集成開發(fā)環(huán)境(IDE)。無論你是要開發(fā)Java應用程序或者網頁上的Applet元件都難不倒它。在功能上與Sun公司所公布的JDK等文字模式開發(fā)工具相較之下來得容易,還允許使用者自訂義操作窗口界面及無限Undo/Redo等功能?! Creator為用戶提供了相當強大的功能,例如項目管理功能,項目模板功能,可個性化設置語法高亮屬性、行數、類瀏覽器、標簽文檔、多功能編繹器,向導功能以及完全可自定義的用戶界面。通過

32、JCreator,我們不用激活主文檔而直接編繹或運行我們的JAVA程序?! Creator能自動找到包含主函數的文件或包含Applet的Html文件,然后它會運行適當的工具。在JCreator中,我們可以通過一個批處理同時編譯多個項目。JCreator的設計接近Windows界面風格,用戶對它的界面比較熟悉。其最大特點是與我們機器中所裝的JDK完美結合,是其它任何一款IDE所不能比擬的。它是一種初學者很容易上手的java開發(fā)工具,缺

33、點是只能進行簡單的程序開發(fā),不能進行企業(yè)J2EE的開發(fā)應用。</p><p>  基于以上考慮,我決定采用JCreator作為開發(fā)這個軟件的工具,以Windows作為這個軟件的運行平臺。</p><p>  2.3.1 面向對象程序概述</p><p>  面向對象其實是現實世界模型的自然延伸。現實世界中任何實體都可以看作是對象。對象之間通過消息相互作用。另外,現

34、實世界中任何實體都可歸屬于某類事物,任何對象都是某一類事物的實例。如果說傳統(tǒng)的過程式編程語言是以過程為中心以算法為驅動的話,面向對象的編程語言則是以對象為中心以消息為驅動。用公式表示,過程式編程語言為:程序=算法+數據;面向對象編程語言為:程序=對象+消息。</p><p>  面向對象設計方法具有四個基本特征:抽象、封裝、繼承和多態(tài)性。</p><p>  抽象(abstract)就是忽

35、略一個問題中與當前目標無關的那些方面,以便將注意力放在與當前目標有關的方面。抽象并不打算解決全部問題,而只是選擇其中的一部分,暫時不考慮一些細節(jié)問題。抽象包括過程抽象和數據抽象,過程抽象是指任何一個明確定義功能的操作都可被使用作為單個的實體看待,盡管這個操作實際上可能由一系列更低級的操作來完成;數據抽象定義了數據類型和施加于該類型對象上的操作。</p><p>  封裝(encapsulation)是面向對象程序

36、設計的一個主要特征。封裝就是把每個對象的數據(屬性)和操作(方法)包裝在一個類中。一旦定義了對象的屬性和行為,則必須決定哪些屬性和行為用于表示內部狀態(tài),哪些屬性和行為在外部是可見的。一般限制直接訪問對象的屬性,而應通過操作接口訪問,這樣使程序中模塊之間關系更簡單、數據更安全。對程序的修改也僅限于類的內部,使得由于修改程序所帶來的影響局部化。</p><p>  繼承(inheritance)是指一個新類可以從現有

37、的類派生而來。新類繼承了現有類的特性,包括一些屬性和行為,并且可以修改或增加新的屬性和行為,使之適合具體的需要。例如,所有的Windows應用程序都有一個窗口,它們可以看作都是從一個窗口類派生出來的,但有的應用程序用于文字處理,有的則用于繪圖,這是由于派生出了不同的類,它們增加了不同的屬性和行為。繼承很好地解決了軟件的可重用性問題。</p><p>  多態(tài)性(polymorphism)是指允許不同類的對象對同一

38、消息作出的響應不相同。例如,同樣的“編輯|粘貼”操作,在字處理程序和繪圖程序中有不同的結果;同樣的加法,把兩個時間值相加和把兩個整數相加的要求肯定不同。多態(tài)性使程序設計靈活、抽象,具有行為共享和代碼共享的優(yōu)點,很好地解決了程序的函數同名問題。</p><p>  通過使用面向對象程序設計的抽象、封裝、繼承和多態(tài)性等機制,程序更易于維護、更新和升級。利用代碼可重用性,程序員可以在程序中大量使用程序的類庫,從而縮短程

39、序的開發(fā)時間,提高程序員的工作效率和程序的可靠性。</p><p>  2.3.2 利用Java語言進行網絡編程的優(yōu)勢</p><p>  Java是一種跨平臺,適合于分布式計算環(huán)境的面向對象編程語言。具體來說,它具有如下特性:簡單性、面向對象、分布式、解釋型、可靠、安全、平臺無關、可移植、高性能、多線程、動態(tài)性等。與C++等語言相比較,語法上Java是簡單的。</p>&

40、lt;p>  Java提供了垃圾回收機制。以往C++的開發(fā)中,最容易出錯誤的地方便是內存管理,申請的內存用完以后必須釋放,否則可使用的內存資源越來越少,直至耗盡系統(tǒng)資源而造成死機。而Java系統(tǒng)中,你可以任意申請內存,Java系統(tǒng)會在適當的時候自動釋放無用的內存資源。這個神奇的機制叫做“垃圾回收”,節(jié)約了許多調試錯誤的時間。</p><p>  在Java中,要寫出低劣的代碼也不是一件容易的事情。一方面,垃

41、圾回收機制堵住了內存泄漏的可能性,另一方面就是異常捕捉機制,它強迫你做最壞的打算。編寫程序時,難免會遇到一些意外,比如文件無法打開、網絡讀取失敗等特殊情況。在C++等語言中是依靠返回值來判斷的,如果一句句地檢查返回值,那實在是太麻煩了。從而,程序員習慣性地忽略返回值的檢查,并安慰自己一切都會好起來的。這便埋下了隱患。在Java中,Java的方法可以拋異常,而你必須應答異常,即使你不想進行任何操作。比如編寫打開文件的代碼,你不得不響應異常

42、以防意外發(fā)生,否則程序根本不能夠通過編譯。未雨綢繆,使得Java系統(tǒng)更穩(wěn)健。</p><p>  Java語言是第一個完全融入網絡的語言,它之所以適合編寫網絡應用程序,歸功于它的以下優(yōu)勢。</p><p>  (1)Java語言與生俱來就是與平臺無關的。Java程序能夠運行在不同的平臺上,運行在不同平臺上的Java程序能夠方便地進行網絡通信。</p><p>  (

43、2)Java語言具有完善的安全機制,可以對程序進行權限檢查,這對網絡程序至關重要。</p><p>  (3)JDK類庫提供了豐富的網絡類庫,如套接字API、JavaMail API和JDBC API等,大大簡化了網絡程序的開發(fā)過程。</p><p>  2.3.3 Socket的概述</p><p>  Network API是典型的用于基于TCP/IP網絡Ja

44、va程序與其他程序通訊,Network API依靠Socket進行通訊。Socket可以看成在兩個程序進行通訊連接中的一個端點,一個程序將一段信息寫入Socket中,該Socket將這段信息發(fā)送給另外一個Socket中,使這段信息能傳送到其他程序中。如圖2-1</p><p>  圖2-1 Socket工作原理圖  我們來分析一下圖2-1,Host A上的程序A將一段信息寫入Socket中,Socket的內容被

45、Host A的網絡管理軟件訪問,并將這段信息通過Host A的網絡接口卡發(fā)送到Host B,Host B的網絡接口卡接收到這段信息后,傳送給Host B的網絡管理軟件,網絡管理軟件將這段信息保存在Host B的Socket中,然后程序B才能在Socket中閱讀這段信息。</p><p>  假設在圖2-1的網絡中添加第三個主機Host C,那么Host A怎么知道信息被正確傳送到Host B而不是被傳送到Host

46、 C中了呢?基于TCP/IP網絡中的每一個主機均被賦予了一個唯一的IP地址,IP地址是一個32位的無符號整數,由于沒有轉變成二進制,因此通常以小數點分隔,如:198.163.227.6,正如所見IP地址均由四個部分組成,每個部分的范圍都是0-255,以表示8位地址。</p><p>  值得注意的是IP地址都是32位地址,這是IP協(xié)議版本4(簡稱Ipv4)規(guī)定的,目前由于IPv4地址已近耗盡,所以IPv6地址正逐

47、漸代替Ipv4地址,Ipv6地址則是128位無符號整數。</p><p>  假設第二個程序被加入圖2-1的網絡的Host B中,那么由Host A傳來的信息如何能被正確的傳給程序B而不是傳給新加入的程序呢?這是因為每一個基于TCP/IP網絡通訊的程序都被賦予了唯一的端口和端口號,端口是一個信息緩沖區(qū),用于保留Socket中的輸入/輸出信息,端口號是一個16位無符號整數,范圍是0-65535,以區(qū)別主機上的每一個

48、程序(端口號就像房屋中的房間號),低于256的短口號保留給標準應用程序,比如pop3的端口號就是110,每一個套接字都組合進了IP地址、端口、端口號,這樣形成的整體就可以區(qū)別每一個套接字t,下面我們就來談談兩種套接字:流套接字和自尋址數據套接字。</p><p>  流套接字(Stream Socket)</p><p>  無論何時,在兩個網絡應用程序之間發(fā)送和接收信息時都需要建立一個可

49、靠的連接,流套接字依靠TCP協(xié)議來保證信息正確到達目的地,實際上,IP包有可能在網絡中丟失或者在傳送過程中發(fā)生錯誤,任何一種情況發(fā)生,作為接受方的 TCP將聯系發(fā)送方TCP重新發(fā)送這個IP包。這就是所謂的在兩個流套接字之間建立可靠的連接。</p><p>  流套接字在C/S程序中扮演一個必需的角色,客戶機程序(需要訪問某些服務的網絡應用程序)創(chuàng)建一個扮演服務器程序的主機的IP地址和服務器程序(為客戶端應用程序提

50、供服務的網絡應用程序)的端口號的流套接字對象。</p><p>  客戶端流套接字的初始化代碼將IP地址和端口號傳遞給客戶端主機的網絡管理軟件,管理軟件將IP地址和端口號通過NIC傳遞給服務器端主機;服務器端主機讀到經過NIC傳遞來的數據,然后查看服務器程序是否處于監(jiān)聽狀態(tài),這種監(jiān)聽依然是通過套接字和端口來進行的;如果服務器程序處于監(jiān)聽狀態(tài),那么服務器端網絡管理軟件就向客戶機網絡管理軟件發(fā)出一個積極的響應信號,接

51、收到響應信號后,客戶端流套接字初始化代碼就給客戶程序建立一個端口號,并將這個端口號傳遞給服務器程序的套接字(服務器程序將使用這個端口號識別傳來的信息是否是屬于客戶程序)同時完成流套接字的初始化。</p><p>  如果服務器程序沒有處于監(jiān)聽狀態(tài),那么服務器端網絡管理軟件將給客戶端傳遞一個消極信號,收到這個消極信號后,客戶程序的流套接字初始化代碼將拋出一個異常對象并且不建立通訊連接,也不創(chuàng)建流套接字對象。這種情形

52、就像打電話一樣,當有人的時候通訊建立,否則電話將被掛起。</p><p>  這部分的工作包括了相關聯的三個類:InetAddress, Socket, 和 ServerSocket。 InetAddress對象描繪了32位或128位IP地址,Socket對象代表了客戶程序流套接字,ServerSocket代表了服務程序流套接字,所有這三個類均位于包java.net中。</p><p>&

53、lt;b>  Socket類</b></p><p>  當客戶程序需要與服務器程序通訊的時候,客戶程序在客戶機創(chuàng)建一個socket對象,Socket類有幾個構造函數。兩個常用的構造函數是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),兩個構造函數都創(chuàng)建了一個基于Socket的連接服務器端流套接字的流套接字。

54、對于第一個InetAddress子類對象通過addr參數獲得服務器主機的IP地址,對于第二個函數host參數包被分配到InetAddress對象中,如果沒有IP地址與host參數相一致,那么將拋出UnknownHostException異常對象。兩個函數都通過參數port獲得服務器的端口號。假設已經建立連接了,網絡API將在客戶端基于Socket的流套接字中捆綁客戶程序的IP地址和任意一個端口號,否則兩個函數都會拋出一個IOExcept

55、ion對象。</p><p>  如果創(chuàng)建了一個Socket對象,那么它可能通過調用Socket的 getInputStream()方法從服務程序獲得輸入流讀傳送來的信息,也可能通過調用Socket的 getOutputStream()方法獲得輸出流來發(fā)送消息。在讀寫活動完成之后,客戶程序調用close()方法關閉流和流套接字,下面的代碼創(chuàng)建了一個服務程序主機地址為198.163.227.6,端口號為13的Soc

56、ket對象,然后從這個新創(chuàng)建的Socket對象中讀取輸入流,然后再關閉流和Socket對象。</p><p>  Socket s = new Socket ("198.163.227.6", 13);InputStream is = s.getInputStream ();// Read from the stream.is.close ();s.close ();</p>

57、;<p>  Socket類包含了許多有用的方法。比如getLocalAddress()將返回一個包含客戶程序IP地址的InetAddress子類對象的引用;getLocalPort()將返回客戶程序的端口號;getInetAddress()將返回一個包含服務器IP地址的InetAddress子類對象的引用;getPort()將返回服務程序的端口號。</p><p><b>  3 系統(tǒng)

58、分析</b></p><p>  3.1 系統(tǒng)可行性</p><p>  本系統(tǒng)的最終目的是實現一個簡單的網絡棋牌室平臺包括兩塊內容服務器和客戶端,可以進行簡單游戲和聊天功能??梢栽诳蛻舳嗽O計輸入要連接的服務器IP地址來創(chuàng)建連接,連接成功后則可創(chuàng)建游戲等待其他用戶的加入。其他用戶如連接到相同的服務器上時可以看見其他用戶可以選中用戶來加入其創(chuàng)建好的游戲?;镜膶崿F可以通過網絡通

59、信使用一個連接是Socket連接。Socket是在一個特定編程模型下,進程間通信鏈路的端點。一個Socket包括兩個流:一個輸入流和一個輸出流。如果一個進程要通過網絡想另一個進程發(fā)送數據,只需簡單的寫入與Socket相關的輸出流。一個進程通過從與Socket相關聯的輸入流來讀取另一個進程所寫的數據,從而可以實現客戶端通過Socket發(fā)送信息給服務器,服務器經過處理返回給客戶端信息來實現通訊。</p><p>  

60、另外,通過Java中位于包java.net和javax.net中用于網絡的API來實現客戶端和服務器端的通訊。而在對程序界面上的設計也是調用各種API來實現這些類主要位于java.awt包中。</p><p>  3.2 系統(tǒng)應達到的標準</p><p>  1、時間經濟性:優(yōu)化邏輯設計與物理設計,使系統(tǒng)運行效率高,反映速度快。</p><p>  2、可靠性:能

61、準確無誤地處理客戶端發(fā)送的命令,發(fā)送和接收數據。</p><p>  3、可理解性:低層的控制面板和聊天窗口界面使得用戶更方便使用該軟件。</p><p>  4、可維護性和適應性:系統(tǒng)應易于修改、易于擴充、易于維護,能夠適應各種協(xié)議不斷變化的需要,而方便的做出更改。</p><p>  3.3 網絡棋牌游戲平臺工作原理</p><p> 

62、 1.網絡棋牌游戲平臺的工作方式是采用客戶/服務器模式??蛻舳撕头掌魇褂肨CP進行連接,為建立連接,服務器都必須打開一個TCP端口。網絡棋牌室平臺服務器預置一個端口8000。</p><p>  java.net.Socket繼承于java.lang.Object,有八個構造器,其方法并不多,下面是使用最頻繁的三個方法。</p><p>  Accept方法用于產生"阻塞&qu

63、ot;,直到接受到一個連接,并且返回一個客戶端的Socket對象實例。"阻塞"是一個術語,它使程序運行暫時"停留"在這個地方,直到一個會話產生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產生的。</p><p>  getInputStream方法獲得網絡連接輸入,同時返回一個IutputStream對象實例。</p><p>  get

64、OutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。</p><p>  注意:其中getInputStream和getOutputStream方法均會產生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。</p><p>  2.如何開發(fā)一個Server-Client模型的程序</p>

65、<p><b>  開發(fā)原理:</b></p><p>  服務器,使用ServerSocket監(jiān)聽指定的端口,端口可以隨意指定(由于1024以下的端口通常屬于保留端口,在一些操作系統(tǒng)中不可以隨意使用,所以建議使用大于1024的端口),等待客戶連接請求,客戶連接后,會話產生;在完成會話后,關閉連接。  客戶端,使用Socket對網絡上某一個服務器的某一個端口發(fā)出連接請求,一旦連接

66、成功,打開會話;會話完成后,關閉Socket??蛻舳瞬恍枰付ù蜷_的端口,通常臨時的、動態(tài)的分配一個1024以上的端口。</p><p>  在界面的操作上進行actionPerformed、MouseListener、ActionListener來監(jiān)聽動作的發(fā)生時間從而來控制游戲運行和聊天實現。</p><p><b>  4 系統(tǒng)模塊設計</b></p&g

67、t;<p>  4.1 模塊組織圖 </p><p>  本系統(tǒng)包括以下幾個模塊:</p><p><b>  1.服務器框架模塊</b></p><p>  2.服務器信息顯示模塊</p><p><b>  3.服務器控制模塊</b></p><p>&l

68、t;b>  4.客戶端框架模塊</b></p><p><b>  5.游戲運行模塊</b></p><p><b>  6.游戲控制模塊</b></p><p><b>  7.用戶聊天模塊</b></p><p><b>  8.用戶信息模塊&l

69、t;/b></p><p>  各模塊之間的組織關系如圖4-1</p><p>  圖4-1 模塊組織圖</p><p>  4.2 Socket流程圖</p><p>  客戶端與服務器端之間的數據交換socket流程圖4-2</p><p>  圖4-2 socket流程圖</p><p

70、>  4.3 模塊功能介紹</p><p><b>  1.服務器框架模塊</b></p><p>  服務器框架模塊的功能如下:</p><p>  管理各種服務器參數;</p><p>  負責偵聽端口,開啟和關閉線程;</p><p>  提供狀態(tài)信息給界面模塊。</p>

71、<p>  2.服務器信息顯示模塊</p><p>  服務器信息顯示模塊的功能如下:</p><p>  顯示當前用戶連接數;</p><p>  顯示服務器信息包括IP地址端口號;</p><p>  顯示用戶所有人模式下聊天的內容。</p><p><b>  3.服務器控制模塊</

72、b></p><p>  服務器控制模塊的功能如下:</p><p>  清除當先顯示的內容;</p><p>  單擊按鍵可重新顯示服務器狀態(tài);</p><p>  關閉服務器按鍵設定;</p><p>  監(jiān)聽動作事件從而進行不同的處理。</p><p><b>  4.客戶

73、端框架模塊</b></p><p>  客戶端框架模塊的功能如下:</p><p><b>  布局棋盤規(guī)格;</b></p><p><b>  布局游戲控制面板;</b></p><p><b>  布局用戶面板;</b></p><p>

74、;<b>  布局聊天面板。</b></p><p><b>  5.游戲運行模塊</b></p><p>  游戲運行模塊的功能如下:</p><p><b>  棋盤的布局;</b></p><p>  當前連接狀況、是否已經創(chuàng)建游戲、游戲狀況等多種狀態(tài)信息的顯示;<

75、/p><p><b>  游戲規(guī)則的設定。</b></p><p><b>  6.游戲控制模塊</b></p><p>  游戲控制模塊的功能如下:</p><p><b>  IP地址輸入框;</b></p><p><b>  連接服務器按鍵

76、;</b></p><p><b>  創(chuàng)建游戲按鍵;</b></p><p><b>  加入游戲按鍵;</b></p><p><b>  放棄游戲按鍵;</b></p><p><b>  退出程序按鍵。</b></p>&

77、lt;p><b>  7.用戶聊天模塊</b></p><p>  用戶聊天模塊的功能如下:</p><p>  顯示用戶的所有人模式下的聊天內容;</p><p>  顯示在私聊模式下的聊天內容;</p><p><b>  聊天內容輸入框。</b></p><p>

78、<b>  8.用戶信息模塊</b></p><p>  用戶信息模塊的功能如下:</p><p>  顯示當前用戶的登入情況;</p><p>  獲得登入用戶的信息;</p><p>  提供可選擇進行游戲的用戶。</p><p><b>  5 詳細設計</b><

79、;/p><p><b>  5.1 通信技術</b></p><p>  這一節(jié)我們將從理論上介紹各種功能在技術上的實現,有了理論上的基礎,在實際中的功能實現將會非常的簡單,而具體的功能實現將在軟件界面及模塊分析兩節(jié)中具體分析。</p><p>  5.1.1 C/S模式</p><p>  C/S模式的基本思想是把集中

80、在一起的應用劃分成功能不同的兩個部分,分別在不同的計算機上運行,通過他們的分工合作來實現一個完整的功能。</p><p>  在這兩部分中,一個為服務器程序,用來響應和提供固定的服務;另一個為客戶機程序,用來向服務器提出請求和要求某種服務。</p><p>  從提供服務器所提供的類型可以分成重復型和并發(fā)型。我們這個某種程度上可以說是重復型。他通過以下步驟和客戶進行交互:</p>

81、;<p>  1. 等待一個客戶的請求的到來</p><p><b>  2. 處理客戶請求</b></p><p>  3. 發(fā)送響應給客戶</p><p><b>  4. 返回到第一步</b></p><p>  重復型服務器關鍵在第二步,此時服務器不能為其他客戶提供服務。<

82、;/p><p>  Java中的網絡編程</p><p>  事實上網絡編程簡單的理解就是兩臺計算機相互通訊數據而已,對于程序員而言,去掌握一種編程接口并使用一種編程模型相對就會顯得簡單的多了,Java SDK提供一些相對簡單的API來完成這些工作。Socket就是其中之一,對于Java而言,這些API存在與java.net 這個包里面,因此只要導入這個包就可以準備網絡編程了。</p&g

83、t;<p>  網絡編程的基本模型就是客戶機到服務器模型,簡單的說就是兩個進程之間相互通訊,然后其中一個必須提供一個固定的位置,而另一個則只需要知道這個固定的位置。并去建立兩者之間的聯系,然后完成數據的通訊就可以了,這里提供固定位置的通常稱為服務器,而建立聯系的通常叫做客戶端,基于這個簡單的模型,就可以進入網絡編程啦。</p><p>  Java對這個模型的支持有很多種API,而這里我只想介紹有關

84、Socket的編程接口,對于Java而言已經簡化了Socket的編程接口。首先我們來討論有關提供固定位置的服務方是如何建立的。Java提供了ServerSocket來對其進行支持.事實上當你創(chuàng)建該類的一個實力對象并提供一個端口資源你就建立了一個固定位置可以讓其他計算機來訪問你,ServerSocket server=new ServerSocket(6789);這里稍微要注意的是端口的分配必須是唯一的。因為端口是為了唯一標識每臺計算機唯

85、一服務的,另外端口號是從0~65535之間的,前1024個端口已經被Tcp/Ip 作為保留端口,因此你所分配的端口只能是1024個之后的。好了,我們有了固定位置.現在所需要的就是一根連接線了.該連接線由客戶方首先提出要求。因此Java同樣提供了一個Socket對象來對其進行支持,只要客戶方創(chuàng)建一個Socket的實例對象進行支持就可以了。</p><p>  5.1.3 Java在Client/Server 網絡

86、中的應用</p><p>  隨著Java語言的日益流行,特別是Java與Internet Web的密切結合,使它在全球取得了巨大的成功。Java語言以其獨立于平臺、面向對象、分布式、多線索及完善的安全機制等特色,成為現代信息系統(tǒng)建設中的良好的開發(fā)平臺和運行環(huán)境。</p><p>  Java網絡應用模型 </p><p>  和Internet上的許多環(huán)境一樣,完

87、整的Java應用環(huán)境實際上也是一個客戶機/服務器環(huán)境,更確切地說是瀏覽器/服務器模型(即Browser/Server模型,簡稱Web模型)。但與傳統(tǒng)的客戶機/服務器(C/S) 的二層結構不同,應用Java的Web模型是由三層結構組成的。傳統(tǒng)的C/S結構通過消息傳遞機制,由客戶端發(fā)出請求給服務器,服務器進行相應處理后經傳遞機制送回客戶端。而在Web模型中,服務器一端被分解成兩部分:一部分是應用服務器(Web 服務器),另一部分是數據庫服務

88、器。</p><p>  針對分布式計算環(huán)境,Java通過其網絡類庫提供了良好的支持。對數據分布,Java提供了一個URL(Uniform Resource Locator) 對象, 利用此對象可打開并訪問網絡上的對象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。對操作分布,Java的客戶機/ 服務器模式可以把運算從服務器分散到客戶一端(服務器負責提供查詢結果,客戶機負責組織結果的顯示),從而提高整個系統(tǒng)的執(zhí)行效率

89、,增加動態(tài)可擴充性。Java網絡類庫是Java 語言為適應Internet 環(huán)境而進行的擴展。另外,為適應Internet的不斷發(fā)展,Java還提供了動態(tài)擴充協(xié)議,以不斷擴充Java網絡類庫。 </p><p>  Java的網絡類庫支持多種Internet協(xié)議,包括Telnet, FTP 和HTTP (WWW),與此相對應的Java網絡類庫的子類庫為:</p><p>  Java.ne

90、t    Java.net.ftp    Java.net.www.content    Java.net.www.html    Java.net.www.http   這些子類庫各自容納了可用于處理Internet協(xié)議的類和方法。其中,java.net用于處理一些基本的網絡功能,包括遠程登錄(Telnet);java.net.ftp用于處理ftp協(xié)議;java.net.www.content用于處理WWW 頁面內容;jav

91、a.net.www.html 和java.net.www.http 則分別提供了對HTML 語言和HTTP 協(xié)議的支持。</p><p>  客戶機/服務器環(huán)境下的Java應用程序</p><p>  客戶機/服務器在分布處理過程中,使用基于連接的網絡通信模式。該通信模式首先在客戶機和服務器之間定義一套通信協(xié)議,并創(chuàng)建一Socket類,利用這個類建立一條可靠的鏈接;然后,客戶機/服務器再在

92、這條鏈接上可靠地傳輸數據。客戶機發(fā)出請求,服務器監(jiān)聽來自客戶機的請求,并為客戶機提供響應服務。這就是典型的"請求-- 應答" 模式。下面是客戶機/服務器的一個典型運作過程:   1、服務器監(jiān)聽相應端口的輸入;   2、客戶機發(fā)出一個請求;   3、服務器接收到此請求;   4、服務器處理這個請求,并把結果返回給客戶機;   5、重復上述過程,直至完成一次會話過程。   按照以上過程,我們使用Java語言編

93、寫一個分別針對服務器和客戶機的應用程序(Application)。該程序在服務器上時,程序負責監(jiān)聽客戶機請求,為每個客戶機請求建立Socket 連接,從而為客戶機提供服務。本程序提供的服務為:讀取來自客戶機的一行文本,反轉該文本,并把它發(fā)回給客戶機。   通過該程序實例我們看到,使用Java語言設計C/S程序時需要注意以下幾點:  ?。?)、 服務器應使用ServerSocket 類</p><p>  5.

94、1.4 Java套接字編程主要類和函數</p><p>  InetAddress類在網絡API套接字編程中扮演了一個重要角色。參數傳遞給流套接字類和自尋址套接字類構造器或非構造器方法。InetAddress描述了32位或64位IP地址,要完成這個功能,InetAddress類主要依靠兩個支持類Inet4Address 和 Inet6Address,這三個類是繼承關系,InetAddress是父類,Inet4A

95、ddress 和 Inet6Address是子類。</p><p>  由于InetAddress類只有一個構造函數,而且不能傳遞參數,所以不能直接創(chuàng)建InetAddress對象,比如下面的做法就是錯誤的:</p><p>  InetAddress ia = new InetAddress ();  但我們可以通過下面的5個工廠方法創(chuàng)建來創(chuàng)建一個InetAddress對象或InetAd

96、dress數組:</p><p>  getAllByName(String host)方法返回一個InetAddress對象的引用,每個對象包含一個表示相應主機名的單獨的IP地址,這個IP地址是通過host參數傳遞的,對于指定的主機如果沒有IP地址存在那么這個方法將拋出一個UnknownHostException 異常對象。</p><p>  getByAddress(byte []

97、addr)方法返回一個InetAddress對象的引用,這個對象包含了一個Ipv4地址或Ipv6地址,Ipv4地址是一個4字節(jié)數組,Ipv6地址是一個16字節(jié)地址數組,如果返回的數組既不是4字節(jié)的也不是16字節(jié)的,那么方法將會拋出一個UnknownHostException異常對象。</p><p>  getByAddress(String host, byte [] addr)方法返回一個InetAddres

98、s對象的引用,這個InetAddress對象包含了一個由host和4字節(jié)的addr數組指定的IP地址,或者是host和16字節(jié)的addr數組指定的IP地址,如果這個數組既不是4字節(jié)的也不是16位字節(jié)的,那么該方法將拋出一個UnknownHostException異常對象。</p><p>  getByName(String host)方法返回一個InetAddress對象,該對象包含了一個與host參數指定的主

99、機相對應的IP地址,對于指定的主機如果沒有IP地址存在,那么方法將拋出一個UnknownHostException異常對象。</p><p>  getLocalHost()方法返回一個InetAddress對象,這個對象包含了本地機的IP地址,考慮到本地主機既是客戶程序主機又是服務器程序主機,為避免混亂,我們將客戶程序主機稱為客戶主機,將服務器程序主機稱為服務器主機。</p><p> 

100、 上面講到的方法均提到返回一個或多個InetAddress對象的引用,實際上每一個方法都要返回一個或多個Inet4Address/Inet6Address對象的引用,調用者不需要知道引用的子類型,相反調用者可以使用返回的引用調用InetAddress對象的非靜態(tài)方法,包括子類型的多態(tài)以確保重載方法被調用?! netAddress和它的子類型對象處理主機名到主機IPv4或IPv6地址的轉換,要完成這個轉換需要使用域名系統(tǒng),下面的代碼

101、示范了如何通過調用getByName(String host)方法獲得InetAddress子類對象的方法,這個對象包含了與host參數相對應的IP地址:</p><p>  InetAddress ia = InetAddress.getByName ("www.javajeff.com"));  一但獲得了InetAddress子類對象的引用就可以調用InetAddress的各種方法來獲

102、得InetAddress子類對象中的IP地址信息,比如,可以通過調用getCanonicalHostName()從域名服務中獲得標準的主機名;getHostAddress()獲得IP地址,getHostName()獲得主機名,isLoopbackAddress()判斷IP地址是否是一個loopback地址。</p><p>  WINSOCK API 包括很多函數,但其中最常用的有:</p><

103、;p>  1、WSAStartup():連結應用程序與 Windows Sockets DLL 的第一個函數。</p><p>  說明: 此函數是應用程序調用 Windows Sockets DLL函數中的第一個,也唯有此函數呼叫成功後,才可以再調用其他 Windows Sockets DLL 的函數。</p><p>  2、WSACleanup():結束 Windows Soc

104、kets DLL 的使用。</p><p>  說明: 當應用程序不再需要使用 Windows Sockets DLL時,須調用此函數來注銷使用,以便釋放其占用的資源。</p><p>  3、 socket():建立Socket。</p><p>  說明: 此函數用來建立一 Socket 描述字,并為此 Socket 建立其所使用的資源。</p>

105、<p>  4、 closesocket():關閉某一Socket。</p><p>  說明: 此一函數是用來關閉某一 Socket。</p><p>  5、 bind():將一本地地址與一個SOCKET描述字連接在一起。 說明:此函數在服務程序上使用,是調用監(jiān)聽函數listen()必須要調用的函數。</p><p>  6、 listen():設定

106、Socket 為監(jiān)聽狀態(tài),準備被連接。</p><p>  說明: 此函數在服務程序上使用,來設定 Socket 進入監(jiān)聽狀態(tài),并設定最多可有多少個在未真正完成連接前的客戶端的連接要求。(目前最大值限制為 5, 最</p><p><b>  小值為1)</b></p><p>  7、 accept():接受某一Socket的連接要求,以完成

107、面向連接的客戶端 Socket 的連接請求。</p><p>  說明: 服務端應用程序調用此函數來接受客戶端Socket 連接請求,accept() 函數的返回值為一新的 Socket,新 Socket 就可用來在服務端和客戶端之間的信息傳遞接收,而原來 Socket 仍然可以接收其他客戶端的連接要求。</p><p>  8、 connect():要求連接某一Socket到指定的網絡上

108、服務端。</p><p>  說明: 此函數用在客戶端,用來向服務端要求建立連接。當連接建立完成後,客戶端即可利用此 Socket 來與服務端進行信息傳遞。</p><p>  9、 receive():從面向連接的 Socket 接收信息。</p><p>  說明: 此函數用來從面向連接的 Socket 接收信息。</p><p>  1

109、0、send():使用面向連接的 Socket 發(fā)送信息。</p><p>  說明: 此函數用來從面向連接的 Socket 發(fā)送信息。</p><p>  5.1.5 套接字編程的系統(tǒng)流程</p><p>  對于面向連接的套接字,服務器端啟動后首先要調用socket()函數建立一個流式套接字,并返回引用新套接字的描述符。之后,將此套接字描述符與本機的一個端口建

110、立關聯,這由bind()函數來完成。繼續(xù)調用Listen()函數將套接字置于被動的偵聽方式以監(jiān)聽連接,并確定能夠同時處理的客戶請求數目。服務器只有在調用了accept()函數進入等待狀態(tài)之后才可以接受來自客戶端的請求。一旦接收到客戶端通過connect()發(fā)出的連接請求,accept()將返回一個新的套接字描述符,通過此套接字即可與客戶端進行數據收發(fā)。待數據傳送完成,服務器、客戶端調用closesocket()關閉套接字。需要說明的是服

溫馨提示

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

評論

0/150

提交評論