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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本 科 生 畢 業(yè) 論 文</p><p>  網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  院 系: 信息科學(xué)與技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系 </p><p>  專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) </p><p&g

2、t;  學(xué)生姓名: </p><p>  學(xué) 號(hào): </p><p>  指導(dǎo)教師: </p><p><b>  [摘 要]<

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

4、并結(jié)合自己的一些想法,實(shí)現(xiàn)了一種網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái),使得符合接口規(guī)定的程序可以相互通信的能力。網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)定義了一種軟件重用的方法,提供了一種可擴(kuò)展軟件設(shè)計(jì)的方法,從而可以提高編程效率。編程者的注意力可以更多的集中在本地化編程上,而網(wǎng)絡(luò)編程部分可以只進(jìn)行少量接口編程即可。</p><p>  關(guān)鍵詞:網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái);接口;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)絡(luò)對(duì)戰(zhàn)平臺(tái)概述1</p><p>  1.2 相關(guān)技術(shù)概述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>  第二章 對(duì)戰(zhàn)平臺(tái)定義4</p><p>  2.1 網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)功能的定義4</p><p>  2.2 網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)接口的定義4</p><p>  2.3 網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)命令的定義5<

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

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

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

13、/p><p>  5.3.2 客戶端啟動(dòng)程序設(shè)計(jì)15</p><p><b>  第六章結(jié)論17</b></p><p><b>  致謝17</b></p><p><b>  參考文獻(xiàn)19</b></p><p><b>  附錄2

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

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

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

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

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

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

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

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

22、<p>  目前絕大多數(shù)數(shù)據(jù)庫為關(guān)系數(shù)據(jù)庫(relational database),對(duì)應(yīng)的管理軟件為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS = Relational DBMS)。</p><p>  SQL(Structured Query Language結(jié)構(gòu)化查詢語言)為關(guān)系數(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))是大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/S

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

49、t;/p><p><b>  5.1概述</b></p><p>  做為本文理論部分的補(bǔ)充和實(shí)踐,本章展示了本文理論的可行性。本章將利用Windows下的編程環(huán)境,展示一個(gè)具備本文闡述的功能的平臺(tái)的設(shè)計(jì)模型。本章闡述的平臺(tái)的設(shè)計(jì)將包括服務(wù)端設(shè)計(jì)與客戶端設(shè)計(jì)。而游戲程序因?yàn)椴粚儆谄脚_(tái)的一部分,可以采取一個(gè)簡(jiǎn)單的程序進(jìn)行模擬。</p><p>  5

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

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

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

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

54、 MFC類庫提供了對(duì)多線程編程的支持。函數(shù)CreateThread可以創(chuàng)建一個(gè)新線程,其原型如下:</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ù)進(jìn)行傳遞。程序員可以在ThreadProc中定義線程的動(dòng)作。</p><

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

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

59、(表定義)、CDaoQueryDef(查詢定義)、CDaoWorkspace(工作空間)。</p><p>  DAO的CDaoDatabase表示一個(gè)到數(shù)據(jù)庫的開放連接,但因?yàn)橐呀?jīng)引入了CDaoWorkspace類,所以事務(wù)的控制和管理不再屬于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ù)庫對(duì)象稱為缺省工作空間的一部分。但構(gòu)造的CDaoDatabase對(duì)象還沒有連接到一個(gè)數(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)絡(luò)UNC = Uniform Naming Convention統(tǒng)一命名協(xié)定)。</p><p>

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

63、外,它還可以改善應(yīng)用程序的性能,因?yàn)椴槐孛看握{(diào)用時(shí)編譯這些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提供的這些類。程序可以進(jìn)行數(shù)據(jù)庫的添加、刪除、查找和更新等功能。對(duì)于一些需要更改數(shù)據(jù)庫的平臺(tái)命令,服務(wù)端將通過分析命令,運(yùn)用DAO技術(shù)進(jìn)行符合的數(shù)據(jù)庫操作。</p><p>  5.3 平臺(tái)客戶端具體設(shè)計(jì)</p><p>  5.3.1 網(wǎng)絡(luò)通信設(shè)計(jì)</p><p>  平臺(tái)客戶端的網(wǎng)絡(luò)通信設(shè)計(jì)將采用MFC的wins

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

67、</p><p>  客戶端需要具有啟動(dòng)游戲程序的功能。用一個(gè)程序啟動(dòng)另一個(gè)程序的語句也是利用windows提供的函數(shù)。其中需要用的結(jié)構(gòu)和函數(shù)如下。</p><p>  SHELLEXECUTEINFO結(jié)構(gòu)記錄了被調(diào)用進(jìn)程的一些信息,定義如下:</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)用程序的路徑,絕對(duì)或相對(duì)都可以。用適當(dāng)?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>  本文描述了一個(gè)網(wǎng)絡(luò)對(duì)戰(zhàn)平臺(tái)的模型,并定義了實(shí)現(xiàn)此模型所需要的方法。該模型

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

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

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

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

77、hannes Gehrke.周立柱,張志強(qiáng),李超,王煜等譯。數(shù)據(jù)庫管理系統(tǒng)原理與設(shè)計(jì),清華大學(xué)出版社,2004年3月。Database management systems(third edition)。</p><p>  齊治昌,譚慶平,寧洪。軟件工程(第二版),高等教育出版社,2004年2月。</p><p>  葉小平,湯庸,湯娜,劉海。數(shù)據(jù)庫系統(tǒng)基礎(chǔ)教程,清華大學(xué)出版社,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è)論文開題報(bào)告</p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論