畢業(yè)設計--網(wǎng)絡對戰(zhàn)平臺的設計與實現(xiàn)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本 科 生 畢 業(yè) 論 文</p><p>  網(wǎng)絡對戰(zhàn)平臺的設計與實現(xiàn)</p><p>  院 系: 信息科學與技術學院計算機科學系 </p><p>  專 業(yè): 計算機科學與技術專業(yè) </p><p&g

2、t;  學生姓名: </p><p>  學 號: </p><p>  指導教師: </p><p><b>  [摘 要]<

3、/b></p><p>  網(wǎng)絡對戰(zhàn)平臺是將各種具有某種共性的程序中的網(wǎng)絡通信部分提取出來,編寫一個獨立的平臺,使得各種符合平臺接口的程序可以具備網(wǎng)絡通信的能力。該平臺只針對某些網(wǎng)絡對戰(zhàn)游戲,故稱為網(wǎng)絡對戰(zhàn)平臺。平臺采用Client/Server結(jié)構(gòu),包括服務端和客戶端。平臺提供一種使程序進行網(wǎng)絡通信的解決方法。本文通過現(xiàn)有的一些已經(jīng)成熟的技術,包括CS結(jié)構(gòu),SOCKET網(wǎng)絡編程,數(shù)據(jù)庫編程,多線程編程等,

4、并結(jié)合自己的一些想法,實現(xiàn)了一種網(wǎng)絡對戰(zhàn)平臺,使得符合接口規(guī)定的程序可以相互通信的能力。網(wǎng)絡對戰(zhàn)平臺定義了一種軟件重用的方法,提供了一種可擴展軟件設計的方法,從而可以提高編程效率。編程者的注意力可以更多的集中在本地化編程上,而網(wǎng)絡編程部分可以只進行少量接口編程即可。</p><p>  關鍵詞:網(wǎng)絡對戰(zhàn)平臺;接口;socket編程</p><p><b>  Abstract&l

5、t;/b></p><p>  The goal of Network Game Platform is to extract a variety of common procedures and build a single platform,whitch makes the programmes that implements the interface can comunicates.The plat

6、form is only for network game comunication,so it is call Network Game Platform.The Platform is built upon Client / Server structure, including server and client.The platform provides a solution on programme communication

7、. In this paper, we use some mature technologies, such as CS structure, SOCKET network prog</p><p>  Keywords: Battle.net;interface;socket programming目 錄</p><p><b>  [摘 要]i</b>&

8、lt;/p><p>  Abstractii</p><p><b>  第一章前言1</b></p><p>  1.1 網(wǎng)絡對戰(zhàn)平臺概述1</p><p>  1.2 相關技術概述1</p><p>  1.2.1 socket編程概述1</p><p>  1

9、.2.2 數(shù)據(jù)庫編程概述2</p><p>  1.2.3 Client/Server結(jié)構(gòu)概述2</p><p>  第二章 對戰(zhàn)平臺定義4</p><p>  2.1 網(wǎng)絡對戰(zhàn)平臺功能的定義4</p><p>  2.2 網(wǎng)絡對戰(zhàn)平臺接口的定義4</p><p>  2.3 網(wǎng)絡對戰(zhàn)平臺命令的定義5<

10、;/p><p>  2.3.1 平臺命令的定義5</p><p>  2.3.2 用戶命令的定義6</p><p>  第三章 對戰(zhàn)平臺服務器端定義7</p><p>  3.1 平臺服務器端功能的定義7</p><p>  3.2 轉(zhuǎn)發(fā)關系的定義8</p><p>  3.3 數(shù)據(jù)庫定義

11、8</p><p>  第四章對戰(zhàn)平臺客戶端定義10</p><p>  4.1 平臺客戶端功能定義10</p><p>  4.2 平臺客戶端接口定義10</p><p>  第五章對戰(zhàn)平臺具體設計11</p><p><b>  5.1概述11</b></p>&

12、lt;p>  5.2 平臺服務器端具體設計11</p><p>  5.2.1 網(wǎng)絡通信設計11</p><p>  5.2.2 多線程設計12</p><p>  5.2.3 數(shù)據(jù)庫設計13</p><p>  5.3 平臺客戶端具體設計14</p><p>  5.3.1 網(wǎng)絡通信設計14<

13、/p><p>  5.3.2 客戶端啟動程序設計15</p><p><b>  第六章結(jié)論17</b></p><p><b>  致謝17</b></p><p><b>  參考文獻19</b></p><p><b>  附錄2

14、0</b></p><p><b>  前言</b></p><p>  1.1 網(wǎng)絡對戰(zhàn)平臺概述</p><p>  隨著互聯(lián)網(wǎng)的興起,人們娛樂的手段開始多元化。網(wǎng)絡使得人們放棄過去自娛自樂的游戲方式,而開始在網(wǎng)絡上尋找志同道合,水平相當?shù)木W(wǎng)友進行共同娛樂。人們的這種需求加速了網(wǎng)絡對戰(zhàn)平臺的興起。</p><p

15、>  如今中國市場有代表性的兩種對戰(zhàn)平臺非浩方對戰(zhàn)平臺和QQ游戲莫屬。浩方對戰(zhàn)平臺提供了一種可在局域網(wǎng)通信的游戲能在非局域網(wǎng)的網(wǎng)絡上進行通信的解決方案。這在中國是開創(chuàng)性的,浩方得到了熱愛游戲的玩家的大力支持,成長迅速。創(chuàng)造了注冊用戶過億,最高同時在線人數(shù)過百萬的驕人記錄。而另一種對戰(zhàn)平臺QQ游戲是騰訊旗下多人在線娛樂休閑平臺。與浩方使用第三方開發(fā)的游戲不同,QQ游戲平臺與平臺上包含的游戲均為騰訊自主開發(fā)。QQ游戲同樣獲得了人們的認

16、可,得到了各個年齡層人們的喜愛。它們的成功說明了人們對在線娛樂的渴望。但它們都是面向用戶的,用戶只需使用平臺,接受他們提供的服務即可。</p><p>  而本文所記述的對戰(zhàn)平臺面向的人群更廣泛些。它也面向用戶,程序開發(fā)者可以將平臺及與平臺整合的自己開發(fā)的游戲程序一起打包給用戶,以供其娛樂。同時更重要的是,平臺提供了一種二次開發(fā)的能力并具備一定的可擴展性。平臺提取了各種具備網(wǎng)絡通信能力的游戲的網(wǎng)絡通信部分,減輕了

17、游戲程序開發(fā)者負擔并轉(zhuǎn)換了其關注的焦點。同時,新的游戲可以很方便地整合進舊的平臺中。</p><p>  1.2 相關技術概述</p><p>  1.2.1 socket編程概述</p><p>  socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網(wǎng)絡發(fā)出請求或者應答

18、網(wǎng)絡請求。</p><p>  socket接口是TCP/IP網(wǎng)絡的API,socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCP/IP網(wǎng)絡上的應用程序。網(wǎng)絡的socket數(shù)據(jù)傳輸是一種特殊的I/O,socket也是一種文件描述符。socket也具有一個類似于打開文件的函數(shù)調(diào)用socket (),該函數(shù)返回一個整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該socket實現(xiàn)的。<

19、;/p><p>  常用的socket類型有兩種:流式socket(SOCK_STREAM)和數(shù)據(jù)報式socket(SOCK_DGRAM)。流式是一種面向連接的socket,針對于面向連接的TCP服務應用;數(shù)據(jù)報式socket是一種無連接的socket,對應于無連接的UDP服務應用。</p><p>  socket描述符是一個指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用socket函數(shù)時

20、,socket執(zhí)行體將建立一個socket,實際上"建立一個socket"意味著為一個socket數(shù)據(jù)結(jié)構(gòu)分配存儲空間。 socket執(zhí)行體為你管理描述符表。兩個網(wǎng)絡程序之間的一個網(wǎng)絡連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機端口、遠端主機地址和遠端協(xié)議端口。socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。</p><p>  1.2.2 數(shù)據(jù)庫編程概述</p><p>

21、  數(shù)據(jù)庫(database)是存儲在計算機里的結(jié)構(gòu)化數(shù)據(jù)的集合,通常由數(shù)據(jù)庫管理系統(tǒng)(DBMS = DataBase Management System)軟件(如Oracle、DB2、SQL Server等)對數(shù)據(jù)庫進行管理,應用程序通過(標準)編程接口(如ODBC、JDBC、ADO等)來訪問數(shù)據(jù)庫。各個角色在數(shù)據(jù)庫編程中的相互關系如圖1。</p><p>  圖1:數(shù)據(jù)庫編程中各角色關系</p>

22、<p>  目前絕大多數(shù)數(shù)據(jù)庫為關系數(shù)據(jù)庫(relational database),對應的管理軟件為關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS = Relational DBMS)。</p><p>  SQL(Structured Query Language結(jié)構(gòu)化查詢語言)為關系數(shù)據(jù)庫的通用查詢語言。SQL包括查詢(query)、操作(Manipulation)、定義(definition)和控制(con

23、trol)四種功能。用戶通過SQL來操作數(shù)據(jù)庫。</p><p>  1.2.3 Client/Server結(jié)構(gòu)概述</p><p>  Client/Server結(jié)構(gòu)(C/S結(jié)構(gòu))是大家熟知的客戶機和服務器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務合理分配到Client端和Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應用軟件系統(tǒng)都是Client/S

24、erver形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應用系統(tǒng)正在向分布式的Web應用發(fā)展,Web和Client/Server 應用都可以進行同樣的業(yè)務處理,應用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應用系統(tǒng),通過現(xiàn)有應用系統(tǒng)中的邏輯可以擴展出新的應用系統(tǒng)。這也就是目前應用系統(tǒng)的發(fā)展方向。</p><p>  C/S又稱Client/Server或客戶/服務器模式。服務器通常采用高性能的PC、工

25、作站或小型機,并采用大型數(shù)據(jù)庫系統(tǒng),如ORACLE、SYBASE、InfORMix或 SQL Server??蛻舳诵枰惭b專用的客戶端軟件。</p><p>  C/S結(jié)構(gòu)的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務器。對應的優(yōu)點就是客戶端響應速度快。</p><p>  第二章 對戰(zhàn)平臺定義</p><p>  2.1 網(wǎng)絡對戰(zhàn)平

26、臺功能的定義</p><p>  網(wǎng)絡對戰(zhàn)平臺實現(xiàn)了使不具有網(wǎng)絡通信能力的游戲程序在網(wǎng)絡中可以進行通信的功能。本平臺主要實現(xiàn)了兩個功能:一,集成在此平臺中的游戲程序彼此通信的數(shù)據(jù)在網(wǎng)絡中的正確傳輸;二,平臺中的用戶特別是處于同一個游戲中的用戶的管理。</p><p>  處于網(wǎng)絡環(huán)境中的游戲程序的通信是實現(xiàn)網(wǎng)絡對戰(zhàn)的基礎,因此也是本平臺關注的一個焦點。此功能使得游戲程序的網(wǎng)絡通信部分的實現(xiàn)

27、與其它功能的實現(xiàn)相互脫離開。游戲程序的實現(xiàn)者只需把關注點放在如何實現(xiàn)程序的特性,如何美化程序界面等功能上。而至于游戲程序如何在網(wǎng)絡上相互通信,只需花費一點時間和精力,進行少量的接口編程,使得游戲程序符合平臺的相關規(guī)定,即可實現(xiàn)??梢哉f這樣可大大減少游戲程序開發(fā)者的時間,使得程序開發(fā)者可以將時間和精力放在游戲程序更應該被關注的部分。</p><p>  平臺中的用戶特別是處于同一個游戲中的用戶的管理是平臺關注的另一

28、個焦點。平臺把處于網(wǎng)絡中的不同游戲程序看作離散點。他們之間的相互聯(lián)系通過本臺實現(xiàn),而這些聯(lián)系的管理當然也由平臺負責。為了保證平臺中用戶之間可以方便正確地通話及娛樂,這種管理必須確保安全和高效。本文采用Client/Server結(jié)構(gòu),來實現(xiàn)符合要求的管理。</p><p>  2.2 網(wǎng)絡對戰(zhàn)平臺接口的定義</p><p>  由于平臺不僅可以運行一種游戲程序,也不僅可以運行一個人編寫的游戲

29、程序。如何讓這些各種各樣的游戲程序都可以方便地使用平臺提供的功能,最方便的解決方法就是定義一套接口規(guī)范。只要游戲程序符合這一接口規(guī)范,就可以方便地整合進平臺,擁有網(wǎng)絡通信的能力。</p><p>  接口定義是重要的,本節(jié)將闡述一個最小且功能完備的接口定義,具體如下。1,游戲程序的動作可以語句化。所謂語句化,就是說游戲程序的動作可以通過定義一些簡單的表示出來。例如在(X,Y)坐標放置一個棋子可語句化為PUX

30、Y,平臺把語句化后的游戲程序的動作稱為命令。命令分為平臺命令和用戶命令。關于命令的進一步定義將在下節(jié)闡述。</p><p>  2,游戲程序必須具備和平臺客戶端在本地進行通信的能力。這一功能可以使得平臺客戶端得到游戲程序打算發(fā)送的數(shù)據(jù),并將其通過網(wǎng)絡傳送給平臺服務器端。本文將通過共享文件的方式來實現(xiàn)游序程序和平臺客戶端的本地通信,游戲程序必須支持這一方式。</p><p>  3,游戲程序

31、必須要實現(xiàn)必要的平臺命令。平臺命令是用來與平臺服務進行交互的。平臺服務器端主要利用這些命令來管理游戲,例如游戲地創(chuàng)建與退出。平臺命令的一部分可由平臺客戶端實現(xiàn)。而其它平臺命令,游戲程序可根據(jù)平臺的要求及自身功能的需求而選擇實現(xiàn),且實現(xiàn)必須保證正確。平臺命令不能用戶自己創(chuàng)造,將由平臺自己定義。</p><p>  4,為了保證游戲數(shù)據(jù)傳輸?shù)募皶r與正確,用戶命令不宜過于復雜,一次傳輸?shù)挠脩裘畈灰诉^多。</p&

32、gt;<p>  除了以上的接口規(guī)定,游戲程序的其余功能的實現(xiàn)將不做任何要求。游戲程序使用何種語言,采用何種技術,運用何種方法,,將完全由程序開發(fā)者自由把握。</p><p>  2.3 網(wǎng)絡對戰(zhàn)平臺命令的定義</p><p>  2.3.1 平臺命令的定義</p><p>  平臺命令是游戲程序與平臺服務器端進行交互的命令,為了使平臺服務器端能“看懂

33、”平臺命令,平臺命令則完全由平臺本身定義。平臺命令由動作標識和參數(shù)組成。為了區(qū)分于用戶命令,動作標識將全部采用下劃線(_)開頭。平臺命令分為發(fā)起命令和應答命令。發(fā)起命令為游戲程序向服務器端傳送的命令,而應答命令是服務器端響應游戲程序的命令。</p><p>  表1為系統(tǒng)定義的平臺命令。</p><p><b>  表1:平臺命令</b></p><

34、;p>  其中主機標識是服務器端為了區(qū)分平臺中的主機而分配的不相同主機號。平臺在用戶登錄成功后,將用_ID id命令進行回復,為主機分配主機號。下面提到的主機標識將沿用此解釋。</p><p>  2.3.2 用戶命令的定義</p><p>  用戶命令由主機標識,動作標識及參數(shù)組成。其中主機標識和動作標識必不可少。用戶命令完全用用戶自定義,但主機標識為確保在同一游戲中的唯一,需使用

35、服務器端的分配的主機標識。游戲程序必須具備將程序動作轉(zhuǎn)換為命令以及將用戶命令解析為程序動作的能力。同時,用戶程序還需確定這一動作發(fā)生的窗口。</p><p>  表2為用戶命令的示例。</p><p><b>  表2:用戶命令</b></p><p>  第三章 對戰(zhàn)平臺服務器端定義</p><p>  3.1 平臺服

36、務器端功能的定義</p><p>  平臺服務器端作為整個平臺的大腦中樞,在整個對戰(zhàn)平臺中起著至關重要的作用。它主要有兩個功能:一,接受平臺用戶發(fā)送的用戶命令,并將其轉(zhuǎn)發(fā)給適當?shù)钠渌脩?;二,接受平臺用戶發(fā)送的平臺命令,分析并將結(jié)果通過平臺命令中的應答命令反饋給發(fā)送平臺命令的用戶。</p><p>  轉(zhuǎn)發(fā)對戰(zhàn)平臺用戶發(fā)送的用戶命令,并將其轉(zhuǎn)發(fā)給適當?shù)钠渌脩?,是對?zhàn)平臺服務器端的二個主要

37、功能之一。從圖2可以看出,平臺服務器端位于對戰(zhàn)平臺構(gòu)建的網(wǎng)絡中的最核心的地位,任何傳送給網(wǎng)絡其他用戶的數(shù)據(jù)必須經(jīng)過它中轉(zhuǎn)。將數(shù)據(jù)正確的轉(zhuǎn)發(fā)是本功能關注的一個重要焦點,轉(zhuǎn)發(fā)關系的定義將在3.2節(jié)中闡述。</p><p>  圖2:服務器端在平臺中的位置</p><p>  接受并反饋用戶發(fā)送的平臺命令是服務器端另一個重要的功能。平臺服務器端通過這一功能管理游戲與用戶。用戶通過這一功能獲得了與

38、平臺中其他用戶相互通信或斷開與其他用戶通信的許可。可以說是與其他用戶通信之前和通信之后,用戶與對戰(zhàn)平臺之間所須答成的約定。這一功能的一次成功實現(xiàn)將導致平臺服務器端在其數(shù)據(jù)庫文件中增加,刪除或更新相應的記錄項。關于數(shù)據(jù)庫的設計,將在3.3節(jié)中闡述。</p><p>  平臺服務器端所處的位置決定了它的重要性,因此一個安全可靠高效的平臺服務器端將是平臺追求的一個重點。</p><p>  3.

39、2 轉(zhuǎn)發(fā)關系的定義</p><p>  所謂轉(zhuǎn)發(fā)關系是指發(fā)送用戶命令的用戶與服務器端將用戶命令轉(zhuǎn)發(fā)給的用戶之間形成的通信關系。這種關系是一種暫時的且動態(tài)的關系,它隨著每次發(fā)送的用戶命令地不同而有所不同。在對戰(zhàn)平臺連接接入平臺用戶所形成的網(wǎng)絡中,每兩個用戶之間能夠知道對方的存在,并無法知道對方的通信地址。而平臺通過轉(zhuǎn)發(fā)關系,可以暫時地將某些用戶聯(lián)系起來,達到通信的目的。</p><p>  

40、轉(zhuǎn)發(fā)關系中接收方的確定將通過平臺服務器端根據(jù)事先制定的規(guī)則分析得到。具體有如下幾種方式:</p><p>  處于游戲或非游戲狀態(tài)的發(fā)送者與對戰(zhàn)平臺上的所有用戶。這種通信方式被稱為公告。該方式安全性要求較低,任何平臺上的用戶均可與其他用戶建立此關系。</p><p>  處于游戲或非游戲狀態(tài)的發(fā)送者與平臺上某一特定的用戶。這種方式被稱為密語。平臺須保證密語不被平臺第三方收到。同時為了增強游

41、戲的公平性,禁止處于同一個游戲中的雙方使用密語。</p><p>  處于游戲狀態(tài)的發(fā)送者與處于同一個游戲中的所有用戶。為了游戲的公平性并且避免觀看者打擾玩家,這一方式的發(fā)送者應該只限于玩家。</p><p>  處于游戲狀態(tài)的發(fā)送者與處于同一個游戲中的觀看者。這一方式是為了滿足觀看者交流看法的需要。平臺需保證發(fā)送內(nèi)容不被其他角色收到。</p><p><b&

42、gt;  3.3 數(shù)據(jù)庫定義</b></p><p>  為了方便平臺服務器端管理平臺上的用戶與游戲,平臺服務器端需建立相應的數(shù)據(jù)庫存儲必要的信息。為了滿足需要,平臺服務器端至少需建立兩個表:user表和game表。這兩個表分別用來管理平臺上的用戶及已經(jīng)創(chuàng)建的游戲。</p><p>  user表記錄了處于平臺中所有用戶的信息。為了符合對戰(zhàn)平臺方便快捷地登入和登出的思想,平臺不

43、需要用戶名及密碼。所以相應地,在user表中,每條記錄項也并非永久地存在的。user表中的記錄項隨著用戶的一次成功登入被創(chuàng)建,伴隨著用戶的登出被刪除。user表的設計如表3所示:</p><p><b>  表3:user表</b></p><p>  user表中的UID為表的主鍵,用來標識平臺中的用戶。USTATUS代表用戶所處的狀態(tài),0標識用戶不在任何游戲中,

44、1標識用戶處于游戲狀態(tài)。UCHARA代表用戶在游戲中的角色,當用戶不在游戲中,UCHARA為0。1標識用戶為游戲創(chuàng)建者,2標識用戶為游戲參與者,3標識用戶為游戲觀看者。GID為用戶所處游戲的標識,為外鍵。用戶IP標識用戶的IP地址。</p><p>  game表記錄了平臺中所有已經(jīng)被創(chuàng)建并且還在進行中的游戲的信息。在游戲成功創(chuàng)建時,平臺服務器向game表增加一條記錄項。在所有用戶退出游戲后,平臺則在game表中

45、刪除相應的游戲的記錄項。game表的設計如表4所示:</p><p><b>  表4:game表</b></p><p>  game表中的GID為表的主鍵,用來標識平臺創(chuàng)建的游戲。GSTATUS標識游戲所處的狀態(tài),0標識未開始,1標識開始。NUM標識游戲中的人數(shù)。DATE標識游戲創(chuàng)建的時間。</p><p><b>  對戰(zhàn)平臺客

46、戶端定義</b></p><p>  4.1 平臺客戶端功能定義</p><p>  平臺客戶端是游戲程序與平臺服務器端的橋梁(如圖3),這也是它最重要功能。平臺客戶端從與游戲程序約定好的共享文件中取出數(shù)據(jù),并通過它與服務器端的網(wǎng)絡連接傳給服務器端。同時,它會將從服務器端收到的數(shù)據(jù),存儲到共享文件中,以供游戲程序使用。平臺客戶端實現(xiàn)了本地通信與網(wǎng)絡通信的轉(zhuǎn)變。</p>

47、;<p>  另外,平臺客戶端也可以實現(xiàn)一些平臺命令。比如創(chuàng)建游戲,退出游戲,加入游戲等。</p><p>  圖3:平臺客戶端所處位置</p><p>  4.2 平臺客戶端接口定義</p><p>  做為游戲程序與平臺服務器端的橋梁,平臺客戶端具有兩個接口。</p><p>  一個接口是其與游戲程序正常通信的保證,這個接

48、口已經(jīng)在2.2節(jié)闡述。</p><p>  另一個接口是其與平臺服務器端正常通信的保證。這個接口為網(wǎng)絡接口,將通過socket編程實現(xiàn)。平臺服務器端將設立監(jiān)聽套接字來監(jiān)聽平臺客戶端發(fā)來的請求??蛻舳送ㄟ^套接字連接服務器端,當連接成功后,客戶端即與服務器端建立了連接??蛻舳丝梢酝ㄟ^這一連接與服務器端進行網(wǎng)絡通信。</p><p><b>  對戰(zhàn)平臺具體設計</b>&l

49、t;/p><p><b>  5.1概述</b></p><p>  做為本文理論部分的補充和實踐,本章展示了本文理論的可行性。本章將利用Windows下的編程環(huán)境,展示一個具備本文闡述的功能的平臺的設計模型。本章闡述的平臺的設計將包括服務端設計與客戶端設計。而游戲程序因為不屬于平臺的一部分,可以采取一個簡單的程序進行模擬。</p><p>  5

50、.2 平臺服務器端具體設計</p><p>  5.2.1 網(wǎng)絡通信設計</p><p>  服務器端網(wǎng)絡通信的設計將采用MFC的winsock。圖4出示了Windows 服務器端流程。</p><p>  圖4:Windows服務端流程</p><p>  WSAStartup與WSACleanup分別用來注冊與注銷Winsock所需要的d

51、ll。Winsock通過socket函數(shù)創(chuàng)建套接字,用創(chuàng)建成功的套接字進行bind和listen操作,當這兩個操作成功后,服務器即啟動成功。服務器將在指定的IP與端口號上監(jiān)聽所有來自客戶端的連接。每當通過TCP/IP的三次握手建立一個連接后,accept將返回一個用來和所連接客戶端通信的套接字。通過recv和send操作,服務端可以接收來自客戶端的消息并向客戶端發(fā)送自己的信息。當連接不需要時,closesocket將關閉指定的套接字,從

52、而關閉套接字所關聯(lián)的連接?!?lt;/p><p>  5.2.2 多線程設計</p><p>  多線程是為了使得多個線程并行的工作以完成多項任務,以提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務的時候被實現(xiàn)的。使用線程有很多的好處,下面將列舉四點:</p><p>  1,使用線程可以把占據(jù)長時間的程序中的任務放到后臺去處理</p><p>

53、  2,用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進度條來顯示處理的進度</p><p>  3,程序的運行速度可能加快在一些等待的任務實現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。</p><p>  4,提高用戶界面按鈕的響應速度。</p><p> 

54、 MFC類庫提供了對多線程編程的支持。函數(shù)CreateThread可以創(chuàng)建一個新線程,其原型如下:</p><p>  HANDLE WINAPI CreateThread(</p><p>  LPSECURITY_ATTRIBUTES lpThreadAttributes,</p><p>  SIZE_T dwStackSize,</p><

55、;p>  LPTHREAD_START_ROUTINE lpStartAddress,</p><p>  LPVOID lpParameter,</p><p>  DWORD dwCreationFlags,</p><p>  LPDWORD lpThreadId</p><p><b>  );</b>&l

56、t;/p><p>  其中l(wèi)pStartAddress為函數(shù)指針,其指向的函數(shù)即為線程入口函數(shù),一般入口函數(shù)的原型為:</p><p>  DWORD WINAPI ThreadProc (LPVOID); </p><p>  而函數(shù)所需要的參數(shù),將通過lpParameter參數(shù)進行傳遞。程序員可以在ThreadProc中定義線程的動作。</p><

57、;p>  在平臺服務端上,服務端將為每個連接創(chuàng)建一個線程,在線程中處理與這個連接相關的方方面面,例如與客戶端的通信等。</p><p>  5.2.3 數(shù)據(jù)庫設計</p><p>  對于大型的應用,平臺應選用SQL Server等做為數(shù)據(jù)庫,但本章將闡述的是用Access做為數(shù)據(jù)庫。而相應的采用MFC提供的DAO技術進行數(shù)據(jù)庫操作。</p><p>  DA

58、O(Data Access Objects數(shù)據(jù)訪問對象)——為了為微軟自己的Access所建立的微軟噴氣式(Jet噴射)數(shù)據(jù)庫,提供比ODBC更豐富的功能(如支持數(shù)據(jù)庫定義語言DDL及可訪問表與列結(jié)構(gòu))和更快捷的訪問,微軟開發(fā)了DAO,并在MFC的原有ODBC類的基礎上,建立了一系列新類CDao*:CDaoDatabase(數(shù)據(jù)庫)、CDaoRecordset(記錄集)和CDaoRecordView(記錄視圖)及CDaoTableDef

59、(表定義)、CDaoQueryDef(查詢定義)、CDaoWorkspace(工作空間)。</p><p>  DAO的CDaoDatabase表示一個到數(shù)據(jù)庫的開放連接,但因為已經(jīng)引入了CDaoWorkspace類,所以事務的控制和管理不再屬于CDaoDatabase類。</p><p>  類CDaoDatabase的構(gòu)造函數(shù)為</p><p>  CDaoDa

60、tabase( CDaoWorkspace* pWorkspace = NULL );</p><p>  若以void或NULL調(diào)用該構(gòu)造函數(shù),則所構(gòu)造的數(shù)據(jù)庫對象稱為缺省工作空間的一部分。但構(gòu)造的CDaoDatabase對象還沒有連接到一個數(shù)據(jù)庫。要建立連接,需要調(diào)用Open函數(shù):</p><p>  virtual void Open( LPCTSTR lpszName, BOOL

61、bExclusive = FALSE, </p><p>  BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = _T("") );</p><p>  其中,lpszName一般為MDB文件的路徑(也可以是網(wǎng)絡UNC = Uniform Naming Convention統(tǒng)一命名協(xié)定)。</p><p>

62、  打開數(shù)據(jù)庫后,程序就可以對數(shù)據(jù)庫進行操作了。利用DAO的CDaoTableDef類,可以在應用程序中觀察和修改數(shù)據(jù)庫的內(nèi)部結(jié)構(gòu),還可以獲得特定表的各個字段、字段的類型和長度等信息。</p><p>  CDaoQueryDef類封裝了一個查詢,該查詢被存儲在數(shù)據(jù)庫或內(nèi)存中。應用程序可以用查詢來保存常用的SQL語句,并可給查詢?nèi)∶┦褂?。相對于反復?gòu)造SQL語句,這種形式為查詢功能的復用提供了一種方便的方法。此

63、外,它還可以改善應用程序的性能,因為不必每次調(diào)用時編譯這些SQL語句。下面是CdaoQueryDef提供的主要函數(shù):</p><p>  virtual void Open( LPCTSTR lpszName = NULL );</p><p>  virtual void Create( LPCTSTR lpszName = NULL, LPCTSTR lpszSQL = NULL );

64、</p><p>  virtual void Append( );</p><p>  CString GetSQL( );</p><p>  void SetSQL( LPCTSTR lpszSQL );</p><p>  virtual void Execute( int nOptions = dbFailOnError );<

65、;/p><p>  通過MFC提供的這些類。程序可以進行數(shù)據(jù)庫的添加、刪除、查找和更新等功能。對于一些需要更改數(shù)據(jù)庫的平臺命令,服務端將通過分析命令,運用DAO技術進行符合的數(shù)據(jù)庫操作。</p><p>  5.3 平臺客戶端具體設計</p><p>  5.3.1 網(wǎng)絡通信設計</p><p>  平臺客戶端的網(wǎng)絡通信設計將采用MFC的wins

66、ock,圖5為Windows客戶端流程。</p><p>  圖5:Windows客戶端流程</p><p>  客戶端與服務端具備相同名字的函數(shù)的功能相同。但客戶端不需要bind與listen,而是需要connect。connect是客戶端向服務器發(fā)送連接請求。當connect成功時,客戶端建立了和服務端的連接。</p><p>  5.3.2 客戶端啟動程序設計

67、</p><p>  客戶端需要具有啟動游戲程序的功能。用一個程序啟動另一個程序的語句也是利用windows提供的函數(shù)。其中需要用的結(jié)構(gòu)和函數(shù)如下。</p><p>  SHELLEXECUTEINFO結(jié)構(gòu)記錄了被調(diào)用進程的一些信息,定義如下:</p><p>  typedef struct _SHELLEXECUTEINFO {</p><p

68、>  DWORD cbSize;</p><p>  ULONG fMask;</p><p>  HWND hwnd;</p><p>  LPCTSTR lpVerb;</p><p>  LPCTSTR lpFile;</p><p>  LPCTSTR lpParameters;</p>&

69、lt;p>  LPCTSTR lpDirectory;</p><p>  int nShow;</p><p>  HINSTANCE hInstApp;</p><p>  LPVOID lpIDList;</p><p>  LPCTSTR lpClass;</p><p>  HKEY hkeyClass

70、;</p><p>  DWORD dwHotKey;</p><p><b>  union {</b></p><p>  HANDLE hIcon;</p><p>  HANDLE hMonitor;</p><p>  } DUMMYUNIONNAME;</p><p

71、>  HANDLE hProcess;</p><p>  } SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;</p><p>  其中l(wèi)pFile包含被調(diào)用程序的路徑,絕對或相對都可以。用適當?shù)闹到o此結(jié)構(gòu)賦值后。調(diào)用全局函數(shù):</p><p>  BOOL ShellExecuteEx( </p>

72、<p>  LPSHELLEXECUTEINFO lpExecInfo</p><p><b>  );</b></p><p>  即可執(zhí)行所要的程序。</p><p><b>  結(jié)論</b></p><p>  本文描述了一個網(wǎng)絡對戰(zhàn)平臺的模型,并定義了實現(xiàn)此模型所需要的方法。該模型

73、使平臺具備網(wǎng)絡通信的功能。游戲程序通過與平臺的接口,使得游戲程序具備網(wǎng)絡通信的能力。接口的定義使得模型具備可擴展性。任何人編寫的程序,只要符合平臺的接口規(guī)范,就可以方便地整合進這個平臺。如今互聯(lián)網(wǎng),每個人都扮演著信息的接收者和發(fā)布者的雙重角色。而此平臺的設計也恰好符合這一當今互聯(lián)網(wǎng)的特點。任何人都可以發(fā)布自己編寫的游戲,供其他人使用。而由于存在著這樣一個能用的平臺,游戲間的通信變得非常簡單。聚合更多人的力量可以使得平臺的游戲更加豐富,而

74、每平臺用戶也有了選擇游戲的機會。</p><p>  但同時,平臺還存在著一些缺點。平臺并不支持所有的游戲,特別是一些大型復雜游戲。這是因為游戲動作的語句化對于平臺非常重要。但有些游戲語句化非常困難或者語句化后的命令非常復雜。為了增加平臺的可擴展性和用戶使用的方便性,平臺并沒有更多的關注系統(tǒng)的安全。平臺抵御惡意程序的攻擊能力較差。</p><p><b>  致謝</b&g

75、t;</p><p>  感謝李才偉老師的指導。他在我論文選題等方面給了我很多的指導。對我論文的初稿做了很多的改正。</p><p>  感謝周圍的同學,他們在論文過程中給了我很多有用的啟發(fā)并幫我修改論文格式。</p><p>  感謝母校中山大學四年的培養(yǎng)。她給了我知識,教會了我如何思考。</p><p><b>  參考文獻&l

76、t;/b></p><p>  W.Richard Stevens ,Bill Fenner,Andrew M.rudoff.UNIX Network Programming (third edition),機械工業(yè)出版社,2004。</p><p>  李才偉。Windows編程基礎,2004。</p><p>  Raghu Ramakrishnan,Jo

77、hannes Gehrke.周立柱,張志強,李超,王煜等譯。數(shù)據(jù)庫管理系統(tǒng)原理與設計,清華大學出版社,2004年3月。Database management systems(third edition)。</p><p>  齊治昌,譚慶平,寧洪。軟件工程(第二版),高等教育出版社,2004年2月。</p><p>  葉小平,湯庸,湯娜,劉海。數(shù)據(jù)庫系統(tǒng)基礎教程,清華大學出版社,2007

78、年3月。</p><p>  Anthony Jones,Jim Ohlund. Network Programming for Microsoft Windows(second edtion),Microsoft Press,2002</p><p>  W.Richard Stevens。TCP/IP Illustracted Volume 1:The Protocols.Addiso

79、n Wesley/Pearson。2000</p><p>  W.Richard Stevens。TCP/IP Illustracted Volume 2:The Implementation.Addison Wesley/Pearson。2000</p><p>  孫鑫、余安萍,VC++深入詳解,北京:電子工業(yè)出版社,2006</p><p>  W.Rich

80、ard Stevens。TCP/IP Illustrated Volume 3:TCP for Transactions,HTTP,NNTP,and the UNIX Domain Protocols. Addison Wesley/Pearson。2000</p><p><b>  附錄</b></p><p>  附表一 畢業(yè)論文開題報告</p>

溫馨提示

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

評論

0/150

提交評論