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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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

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

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

4、運用Java語言來實現(xiàn)一種簡單的網(wǎng)絡(luò)棋牌室平臺,主要包括一種游戲和聊天功能。</p><p>  關(guān)鍵詞:Java Socket;網(wǎng)絡(luò)編程;套接字;流套接字</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 當(dāng)前網(wǎng)絡(luò)棋牌平臺的發(fā)展概況2</p><p>  2.1.2 網(wǎng)絡(luò)棋牌室平臺的繼續(xù)發(fā)展2</p><p>  2.2 解決方案3</p><p>  2.3 開發(fā)工具和平臺3</p><p>  2.3.1 面向?qū)ο蟪绦蚋攀?</p><p>  2.3.2 利用Java語言進行網(wǎng)絡(luò)

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)應(yīng)達到的標(biāo)準(zhǔn)9</p><p>  3.3 網(wǎng)絡(luò)棋牌友游戲平臺工作原理9</

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

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

16、0</p><p>  5.2軟件界面設(shè)計21</p><p>  5.3 模塊分析22</p><p>  5.3.1 服務(wù)器框架模塊22</p><p>  5.3.2 服務(wù)器信息顯示模塊23</p><p>  5.3.3 服務(wù)器控制模塊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 調(diào)試與測試34</p><p

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

19、<p><b>  1 引言</b></p><p>  網(wǎng)絡(luò)棋牌游戲平臺在在目前的休閑游戲市場上有著很大份額,給用戶提供一個相互交流學(xué)習(xí)的平臺,也是目前大多數(shù)網(wǎng)民娛樂的主要方式。</p><p>  而時下,無論是網(wǎng)絡(luò)游戲還是單機游戲,真正適合中小學(xué)生玩的具有寓教于樂意義的游戲可謂少之又少,且后繼乏力。而血腥暴力游戲?qū)η嗌倌甑倪^度侵蝕,則在很大程度上成為

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

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

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

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

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

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

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

27、費游戲等。</p><p>  2.1.2 網(wǎng)絡(luò)棋牌室平臺的繼續(xù)發(fā)展</p><p>  從前,在對平臺的設(shè)計上實現(xiàn)的功能只是完成簡單的一種網(wǎng)絡(luò)棋牌游戲?qū)暮土奶欤缃竦木W(wǎng)絡(luò)平臺都講究更多的交流和互動性,特別在對游戲的設(shè)計上更多的是針對地區(qū)性的棋牌游戲的設(shè)計來吸收更多的地方用戶。從總體的調(diào)查上來看以前的棋牌游戲都過多的基于大眾方面來對游戲的設(shè)計,現(xiàn)在更多的投入就在于對游戲設(shè)計的針對性。

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

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

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

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

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

33、點是只能進行簡單的程序開發(fā),不能進行企業(yè)J2EE的開發(fā)應(yīng)用。</p><p>  基于以上考慮,我決定采用JCreator作為開發(fā)這個軟件的工具,以Windows作為這個軟件的運行平臺。</p><p>  2.3.1 面向?qū)ο蟪绦蚋攀?lt;/p><p>  面向?qū)ο笃鋵嵤乾F(xiàn)實世界模型的自然延伸。現(xiàn)實世界中任何實體都可以看作是對象。對象之間通過消息相互作用。另外,現(xiàn)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

56、ket對象,然后從這個新創(chuàng)建的Socket對象中讀取輸入流,然后再關(guān)閉流和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()將返回一個包含服務(wù)器IP地址的InetAddress子類對象的引用;getPort()將返回服務(wù)程序的端口號。</p><p><b>  3 系統(tǒng)

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

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

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

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

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

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

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

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

66、成功,打開會話;會話完成后,關(guān)閉Socket。客戶端不需要指定打開的端口,通常臨時的、動態(tài)的分配一個1024以上的端口。</p><p>  在界面的操作上進行actionPerformed、MouseListener、ActionListener來監(jiān)聽動作的發(fā)生時間從而來控制游戲運行和聊天實現(xiàn)。</p><p><b>  4 系統(tǒng)模塊設(shè)計</b></p&g

67、t;<p>  4.1 模塊組織圖 </p><p>  本系統(tǒng)包括以下幾個模塊:</p><p><b>  1.服務(wù)器框架模塊</b></p><p>  2.服務(wù)器信息顯示模塊</p><p><b>  3.服務(wù)器控制模塊</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>  各模塊之間的組織關(guān)系如圖4-1</p><p>  圖4-1 模塊組織圖</p><p>  4.2 Socket流程圖</p><p>  客戶端與服務(wù)器端之間的數(shù)據(jù)交換socket流程圖4-2</p><p>  圖4-2 socket流程圖</p><p

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

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

72、b></p><p>  服務(wù)器控制模塊的功能如下:</p><p>  清除當(dāng)先顯示的內(nèi)容;</p><p>  單擊按鍵可重新顯示服務(wù)器狀態(tài);</p><p>  關(guān)閉服務(wù)器按鍵設(shè)定;</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>  當(dāng)前連接狀況、是否已經(jīng)創(chuàng)建游戲、游戲狀況等多種狀態(tài)信息的顯示;<

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

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>  顯示用戶的所有人模式下的聊天內(nèi)容;</p><p>  顯示在私聊模式下的聊天內(nèi)容;</p><p><b>  聊天內(nèi)容輸入框。</b></p><p>

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

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

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

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

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

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

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

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

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

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

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

89、,增加動態(tài)可擴充性。Java網(wǎng)絡(luò)類庫是Java 語言為適應(yīng)Internet 環(huán)境而進行的擴展。另外,為適應(yīng)Internet的不斷發(fā)展,Java還提供了動態(tài)擴充協(xié)議,以不斷擴充Java網(wǎng)絡(luò)類庫。 </p><p>  Java的網(wǎng)絡(luò)類庫支持多種Internet協(xié)議,包括Telnet, FTP 和HTTP (WWW),與此相對應(yīng)的Java網(wǎng)絡(luò)類庫的子類庫為:</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用于處理一些基本的網(wǎng)絡(luò)功能,包括遠程登錄(Telnet);java.net.ftp用于處理ftp協(xié)議;java.net.www.content用于處理WWW 頁面內(nèi)容;jav

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

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

93、寫一個分別針對服務(wù)器和客戶機的應(yīng)用程序(Application)。該程序在服務(wù)器上時,程序負責(zé)監(jiān)聽客戶機請求,為每個客戶機請求建立Socket 連接,從而為客戶機提供服務(wù)。本程序提供的服務(wù)為:讀取來自客戶機的一行文本,反轉(zhuǎn)該文本,并把它發(fā)回給客戶機。   通過該程序?qū)嵗覀兛吹?,使用Java語言設(shè)計C/S程序時需要注意以下幾點:  ?。?)、 服務(wù)器應(yīng)使用ServerSocket 類</p><p>  5.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論