基于TcpIP協(xié)議的網(wǎng)絡(luò)通訊設(shè)計(服務(wù)器)_第1頁
基于TcpIP協(xié)議的網(wǎng)絡(luò)通訊設(shè)計(服務(wù)器)_第2頁
基于TcpIP協(xié)議的網(wǎng)絡(luò)通訊設(shè)計(服務(wù)器)_第3頁
基于TcpIP協(xié)議的網(wǎng)絡(luò)通訊設(shè)計(服務(wù)器)_第4頁
基于TcpIP協(xié)議的網(wǎng)絡(luò)通訊設(shè)計(服務(wù)器)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 jishouuniversity專業(yè)課課程論文題 目:基于 tcp/ip協(xié)議的網(wǎng)絡(luò)通訊設(shè)計作 者:學 號:所屬學院:信息科學與工程學院專業(yè)年級:總 評 分:完成時間:吉首大學信息科學與工程學院基于tcp/ip協(xié)議的網(wǎng)絡(luò)通訊設(shè)計(吉首大學信息科學與工程學院,湖南 吉首 41600)摘要本論文設(shè)計的目的是基于tcp/ip點對點通訊技術(shù),以vb為平臺設(shè)計并實現(xiàn)了一個基于c/s(客戶端/服務(wù)器)模式的五子棋網(wǎng)絡(luò)游戲的總體設(shè)計方法。本設(shè)計主要是建構(gòu)服務(wù)器端,采用tcp/ip網(wǎng)絡(luò)協(xié)議,使用vb提供的winsock控件來實現(xiàn)與客戶端的網(wǎng)絡(luò)通信功能。主要功能是使客戶端能連接到服務(wù)器端,雙方可以通過網(wǎng)絡(luò)對戰(zhàn),

2、并且能夠自動判斷勝負。特點是支持雙方網(wǎng)上聊天功能,還增添了悔棋、復(fù)盤、保存棋局/聊天記錄等功能。關(guān)鍵詞:winsock;vb;c/s工作模式;五子棋;tcp/iprealization of network communication design based on tcp/ip protocol (server)abstractthe thesis is aimed to achieve a c/s (client/server) mode backgammon online game based on the point to point communication technology

3、by tcp/ip, with the microsoft visual basic software platform. this design main to build a server-side that applied the tcp/ip protocol as the network protocol and used the tool of visual basic, winsock, to realize the network communication. the functions of the design contain client and server side

4、can be connected to each other and plays the backgammon games online, then it can auto judge the victory or defeat. the designs feature is to support chats online, undo, and replay, save games and chat records.keywords: winsock; microsoft visual basic; client/server mode; backgammon game; tcp/ip目錄第一

5、章緒論11.1 五子棋的簡介1第二章 開發(fā)工具的選擇22.1 開發(fā)背景與現(xiàn)狀2第三章 網(wǎng)絡(luò)通訊的基本原理33.1 tcp/ip 體系結(jié)構(gòu)33.1.1 tcp/ip簡介33.1.2 tcp/ip特點33.1.3 tcp/ip協(xié)議的應(yīng)用43.2 winsock533需求分析與總體設(shè)計73.3.1 需求分析 五子棋功能需求 五子棋的規(guī)則73.3.2 總體分析734 五子棋游戲設(shè)計93.4.1 設(shè)計原理93.4.2通訊流程93.4.3 算法描述 棋盤繪制算法 判斷輸贏算法 下棋決策算法 聊天記錄管理

6、算法 下棋記錄管理算法18第四章 軟件測試204.1 登陸界面設(shè)計204.2 下棋界面設(shè)計21第五章 軟件測試225.1 問題的發(fā)現(xiàn)225.2 問題的解決22第六章 總結(jié)與體會236.1 總結(jié)236.2 體會23參考文獻25第一章緒論1.1 五子棋的簡介眾所周知,五子棋是我國古代的、傳統(tǒng)的黑白棋種之一,大約在南北朝時期隨圍棋一起先后傳入朝鮮、日本等地。五子棋國際上正式稱“連珠”,五子棋簡單易學而又富有趣味,為大眾喜愛。然而,五子棋又包含深奧的哲理和技巧,尤其是隨著國際職業(yè)連珠運動的發(fā)展和競賽規(guī)則的逐步完善,技法和戰(zhàn)術(shù)有了很大發(fā)展,因此已不再是簡單的游戲。五子棋與圍棋棋子相似,

7、圍棋像軍團作戰(zhàn),博大精深;五子棋則短兵相接,兇險復(fù)雜。五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學的高深學問“陰陽易理”;它既有簡單易學的特性,為廣大人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點”的連接。它是中西文化的交流點,是古今哲理的結(jié)晶。第二章 開發(fā)工具的選擇2.1 開發(fā)背景與現(xiàn)狀在很早以前五子棋軟件就已經(jīng)被開發(fā)出來了,當時的五子棋軟件僅提供了“人機模式”與“雙人模式”?!叭藱C模式”是指,人與計算機進行對弈,計算機按照事先編寫

8、好的算法程序來進行下棋;“雙人模式”是指,兩個人通過交替使用同一臺計算機來進行下棋。無論是選擇哪一種模式,所有的操作都必須在同一臺計算機上來往完成,棋局無法在異地計算機之間來進行,故而也叫單機版五子棋軟件。隨著計算機網(wǎng)絡(luò)的迅猛發(fā)展,異地計算機之間的通信變得十分便捷。這也為異地間的用戶通過網(wǎng)絡(luò)來進行下棋提供了可能。網(wǎng)絡(luò)五子棋軟件利用tcp/ip協(xié)議,在異地的玩家之間建立起tcp連接,并用它來交換棋局的各種數(shù)據(jù)信息。所以,網(wǎng)絡(luò)五子棋軟件在下棋以前必須要對相關(guān)的網(wǎng)絡(luò)參數(shù)進行設(shè)置,才能實現(xiàn)玩家雙方的成功連接。連接成功后,玩家雙方輪流下棋,并將每一步下棋的信息通過網(wǎng)絡(luò)傳送給對方,使得雙方棋盤上的棋子保持

9、一致,并且提供了“互動聊天”“悔棋”、“復(fù)盤”和“保存棋局”等功能。第三章 網(wǎng)絡(luò)通訊的基本原理 3.1 tcp/ip 體系結(jié)構(gòu)3.1.1 tcp/ip簡介tcp/ip 作為 internet的核心協(xié)議,通過近二十多年的發(fā)展已日漸成熟,并被廣泛應(yīng)用于局域網(wǎng)和廣域網(wǎng)中,目前已成為事實上的國際標準。tcp/ip 協(xié)議集確立了 internet 的技術(shù)基礎(chǔ)。tcp/ip 協(xié)議主要作用于 osi 網(wǎng)絡(luò)參考模型中的網(wǎng)絡(luò)層(第3層)、傳輸層(第4層)和應(yīng)用層(第7層)。數(shù)據(jù)鏈路層(第2層)的功能主要應(yīng)用于其它協(xié)議如以太網(wǎng)(ethernet)、atm、幀中繼(frame relay),以及多數(shù)供應(yīng)商特定協(xié)議等

10、。tcp/ip 充分支持所有通用第2層協(xié)議。tcp/ip 組中的應(yīng)用程序通常直接運行于傳輸層協(xié)議 tcp 或 udp 上面,并不需要表示層(第6層)和會話層(第5層)的支持。3.1.2 tcp/ip特點tcp/ip協(xié)議的核心部分是傳輸層協(xié)議(tcp、udp),網(wǎng)絡(luò)層協(xié)議(ip)和物理接口層,這三層通常是在操作系統(tǒng)內(nèi)核中設(shè)計。因此用戶一般不涉及。編程時,編程界面有兩種形式:一、是由內(nèi)核心直接提供的系統(tǒng)調(diào)用;二、使用以庫函數(shù)方式提供的各種函數(shù)。前者為核內(nèi)設(shè)計,后者為核外設(shè)計。用戶服務(wù)要通過核外的應(yīng)用程序才能設(shè)計,所以要使用套接字(socket)來設(shè)計。tcp/ip協(xié)議并不完全符合osi的七層參考模

11、型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層和應(yīng)用層。而tcp/ip通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為: 圖 3-1-2 tcp/ip參考模型應(yīng)用層:在tcp/ip模型的最上層是應(yīng)用層(application layer),它包含所有的高層的協(xié)議。高層協(xié)議有:虛擬終端協(xié)議telnet、文件傳輸協(xié)議ftp、電子郵件傳輸協(xié)議smtp、域名系統(tǒng)服務(wù)dns、網(wǎng)絡(luò)新聞傳輸協(xié)議nntp和

12、http協(xié)議等等。傳輸層:傳輸層位于互聯(lián)網(wǎng)層的上一層,傳輸層的協(xié)議只存在于主機之中,它的功能是提供主機之間進程與進程的有效數(shù)據(jù)傳輸。傳輸層使用端口號向應(yīng)用層中不同進程提供與該端口號相應(yīng)的服務(wù)。在傳輸層中有tcp協(xié)議(transmission control protocol)即傳輸控制協(xié)議,和udp協(xié)議(user datagram protocol)即用戶數(shù)據(jù)報協(xié)議?;ミB網(wǎng)絡(luò)層:它是整個體系結(jié)構(gòu)的關(guān)鍵部分。它的功能是負責路由選擇合適的通信節(jié)點,使數(shù)據(jù)分組能從源主機發(fā)往目的主機。這些分組到達目的主機的順序和發(fā)送的順序可能不同,因此如果需要按順序發(fā)送和接收時,高層必須對分組進行排序。網(wǎng)絡(luò)接口層(主

13、機-網(wǎng)絡(luò)層):接收ip數(shù)據(jù)報并進行傳輸,從網(wǎng)絡(luò)上接收物理幀,抽取ip數(shù)據(jù)報轉(zhuǎn)交給下一層,對實際的網(wǎng)絡(luò)媒體的管理,定義如何使用實際網(wǎng)絡(luò)(如ethernet、serial line等)來傳送數(shù)據(jù)。tcp協(xié)議是建立在ip協(xié)議之上的面向連接的端到端的通信協(xié)議。由于ip協(xié)議是無連接的不可靠的協(xié)議,ip協(xié)議不可能提供任何可靠性保證機制,所以,tcp協(xié)議的可靠性完全由自身實現(xiàn)。tcp協(xié)議采取了確認、超時重發(fā)、流量控制等各種保證可靠性的技術(shù)和措施。tcp和ip兩種協(xié)議結(jié)合在一起,實現(xiàn)了傳輸數(shù)據(jù)的可靠方法。它的安全和可靠性比udp要高出很多。由于網(wǎng)絡(luò)五子棋對實時性要求較高,綜合考慮的結(jié)果,本軟件應(yīng)使用tcp/i

14、p協(xié)議。3.1.3 tcp/ip協(xié)議的應(yīng)用tcp(transfer control protocol)允許你創(chuàng)建并維護一個與遠程計算機的連接,使用該連接,兩臺計算機之間就可以交換數(shù)據(jù)了。如果你在創(chuàng)建一個客戶應(yīng)用程序,你必須知道服務(wù)器計算機的名字t注:建議用ip地址或ip地址(remotehost屬性),以及要監(jiān)聽的端口號(remoteport屬性),然后調(diào)用connect方法。如果你在創(chuàng)建一個服務(wù)器應(yīng)用程序,設(shè)置要監(jiān)聽的端口號(localport屬性),調(diào)用listen方法。當客戶建立連接請求時,產(chǎn)生connectionrequest事件。要完成該連接,在connectionrequest事件

15、中調(diào)用accept方法。一旦建立了連接,兩臺計算機之間就可以發(fā)送和接受數(shù)據(jù)了。要發(fā)送數(shù)據(jù),調(diào)用senddata方法。當接受數(shù)據(jù)時,產(chǎn)生dataarrival事件。在dataarrival事件中調(diào)用getdata方法來檢取數(shù)據(jù)。3.2 winsock1.tcp協(xié)議:tcp(transfer control protocol)是傳輸控制協(xié)議的簡稱,是基于連接的協(xié)議,在數(shù)據(jù)傳輸之前必須先建立連接。通過tcp協(xié)議建立的是客戶/服務(wù)器通信方式。 2.udp協(xié)議: udp(user data protocol)是用戶數(shù)據(jù)文報協(xié)議的簡稱,兩臺計算機之間的傳輸類似于傳遞郵件;兩者之間沒有明確的連接,可作為服務(wù)

16、器,也可作為客戶機。 使用udp協(xié)議建立對等通信和通過tcp建立客戶/服務(wù)器通信的方法略有不同,它不需要建立客戶和服務(wù)器,而是建立對等通信。 3. winsock屬性: localport:返回或者設(shè)置所用到的本端口;如果指定的是端口 0,就使用一個隨機端口。 protocol:返回或設(shè)置winsock所用的協(xié)議是tcp或udp。 state:返回控件的狀態(tài),用枚舉類型來表示。 常數(shù)值描述sckclosed0缺省值,關(guān)閉sckopen1打開scklistening2偵聽sckconnectionpending3連接掛起sckresolvinghos4識別主機sckhostresolved5已識

17、別主機sckconnecting6正在連接sckconnected7已連接sckclosing8同級人員正在關(guān)閉連接sckerror9錯誤表1 winsock控件的state屬性及其描述4. winsock方法: listen:用于服務(wù)器程序,等待客戶訪問。 connect:用于向遠程主機發(fā)出連接請求 accept:用于接受一個連接請求 senddata: 此方法用于發(fā)送數(shù)據(jù) getdata: 用來取得接收到的數(shù)據(jù) 格式:winsock對象.getdata 變量 ,數(shù)據(jù)類型 ,最大長度 close: 關(guān)閉當前連接 格式:winsock對象.close 5.事件: dataarrival:新數(shù)據(jù)

18、到達時出現(xiàn);獲取一個 getdata 調(diào)用中的全部數(shù)據(jù)。 connectionrequest:當遠程計算機請求連接時接受連接請求。 sendcomplete :在完成一個發(fā)送操作時出現(xiàn) 。 sendprogress :在發(fā)送數(shù)據(jù)期間出現(xiàn) 。 close :當遠程計算機關(guān)閉連接時出現(xiàn)。33需求分析與總體設(shè)計3.3.1 需求分析軟件的需求分析是軟件生存期中重要的一步,也是決定性的一步。只有通過需求分析才能把軟件功能和性能的總體概念描述為具體的軟件需求規(guī)格說明,從而奠定軟件開發(fā)的基礎(chǔ)。在此階段,了解用戶要求本軟件必須滿足的所有功能和限制,以及用戶對軟件功能和性能的要求,弄清用戶想要軟件“做什么”,準

19、確地表達用戶的要求。 五子棋功能需求能通過網(wǎng)絡(luò)進行下棋符合五子棋的基本規(guī)則提供 “復(fù)盤”、“悔棋”等功能提供玩家之間的聊天功能有背景音樂提供保存聊天記錄和下棋記錄的功能 五子棋的規(guī)則規(guī)則沒有依照國際的規(guī)定,所以在19x19的棋盤上,只要任一方先連成五顆就獲勝。當主機的人為先手,下黑子。3.3.2 總體分析在需求分析結(jié)束后,已經(jīng)弄清楚了軟件的各種需求,較好地解決了用戶要軟件“做什么”的問題,接下來就將著手實現(xiàn)軟件的需求,即要著手解決“怎么做”的問題。在這個階段著重實現(xiàn)需求的程序模塊設(shè)計問題,并將需求轉(zhuǎn)化為軟件的系統(tǒng)結(jié)構(gòu),進行模塊的劃分,確定每個模塊的功能、接口及模塊之

20、間的調(diào)用關(guān)系。根據(jù)需求分析制訂出整個軟件的系統(tǒng)結(jié)構(gòu)圖,如圖2.2所示:圖2-234 五子棋游戲設(shè)計3.4.1 設(shè)計原理使用vb提供的winsock控件來實現(xiàn)網(wǎng)絡(luò)通信,采用的網(wǎng)絡(luò)協(xié)議是tcp/ip協(xié)議,包括服務(wù)器端和客戶端,游戲雙方一方先運行服務(wù)器端,另一方運行客戶端,連接到服務(wù)器端,雙方通過網(wǎng)絡(luò)對戰(zhàn),能夠自動判斷勝負,還支持雙方聊天的功能。該游戲的界面能顯示目前的對弈狀態(tài),同時能顯示對弈雙方之間的聊天信息。通過它建立起服務(wù)器與客戶端之間的連接,服務(wù)器端負責接受客戶端的連接和處理客戶端的數(shù)據(jù),客戶端負責連接到服務(wù)器并處理游戲時的交互。流程圖如下:圖通訊流程1.服務(wù)器端程序?qū)崿F(xiàn)過程

21、:(1)服務(wù)器程序必須設(shè)置好localport屬性,作為偵聽端口,該值為一個整數(shù)(只要是一個其它tcp/ip應(yīng)用程序沒有使用過的值即可)。 (2)使用listen方法進入偵聽狀態(tài),等待客戶機程序的連接請求。 (3)客戶機程序發(fā)出連接請求,使服務(wù)器程序產(chǎn)生connectionrequest事件,該事件得到一個參數(shù)requestid。 (4)服務(wù)器程序用accept方法接受客戶機程序的requestid請求。這樣,服務(wù)器程序就可以用senddata方法發(fā)送數(shù)據(jù)了。accept方法必須用上一步得到的requestid作為其參數(shù)。 (5)當服務(wù)器程序接收到數(shù)據(jù)時,產(chǎn)生dataarrival事件,參數(shù)b

22、ytestotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用getdata方法接收數(shù)據(jù)。 (6)如果接受到close事件,則用close方法關(guān)閉tcp/ip連接。 2.客戶端程序的實現(xiàn)過程是: (1) 客戶程序設(shè)置remotehost屬性,以便指定運行服務(wù)器程序的主機 名,該字符串可在“控制面板|網(wǎng)絡(luò)|標識|計算機名”中查到。 (2) 設(shè)置remoteport屬性,以便指定服務(wù)器程序的偵聽端口。 (3)使用connect方法,向服務(wù)器提出連接請求。 (4)服務(wù)器接受客戶機程序的請求,客戶機程序產(chǎn)生connect事件,就可以用senddata方法發(fā)送數(shù)據(jù)了。 (5)當客戶機程序接收到數(shù)據(jù)時,產(chǎn)生

23、dataarrival事件,參數(shù)bytestotal包含接收到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用getdata方法接收數(shù)據(jù)。 (6)如果接受到close事件,則用close方法關(guān)閉連接。3.下圖為tcp協(xié)議通信流程3.4.3 算法描述 棋盤繪制算法繪制一個19x19的棋盤public sub growqp() picture1.cls picture1.left = 0 picture1.top = 0 picture1.width = 10000 picture1.height = 10000 picture1.refresh x = 200 y = 200 while x 92

24、00 x = x + 500 picture1.line (x, 200)-(x, 9700) wend while y 9200 y = y + 500 picture1.line (200, y)-(9700, y) wend picture1.line (100, 100)-(100, 9800) picture1.line (100, 100)-(9800, 100) picture1.line (100, 9800)-(9800, 9800) picture1.line (9800, 100)-(9800, 9800) picture1.line (200, 200)-(9700,

25、200) picture1.line (200, 200)-(200, 9700) picture1.line (9700, 200)-(9700, 9700) picture1.line (200, 9700)-(9700, 9700) blackwin = false whitewin = falseend sub 判斷輸贏算法private sub judblack() 判斷黑是否獲勝 dim i as single dim j as single for i = 0 to 19 for j = 0 to 19 if table(i, j) * table(i, j + 1

26、) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = 1 then msgbox black win.: blackwin = true elseif table(i, j) * table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = 1 then msgbox black win.: blackwin = true elseif table(i, j) * table(i + 1, j + 1) * table(i + 2, j + 2) *

27、table(i + 3, j + 3) * table(i + 4, j + 4) = 1 then msgbox black win.: blackwin = true elseif table(i, j) * table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = 1 then msgbox black win.: blackwin = true end if next j next iend subprivate sub judwhite() 判斷白是否獲勝 dim i

28、 as single dim j as single for i = 0 to 19 for j = 0 to 19 if table(i, j) * table(i, j + 1) * table(i, j + 2) * table(i, j + 3) * table(i, j + 4) = 32 then msgbox white win.: whitewin = true elseif table(i, j) * table(i + 1, j) * table(i + 2, j) * table(i + 3, j) * table(i + 4, j) = 32 then msgbox w

29、hite win.: whitewin = true elseif table(i, j) * table(i + 1, j + 1) * table(i + 2, j + 2) * table(i + 3, j + 3) * table(i + 4, j + 4) = 32 then msgbox white win.: whitewin = true elseif table(i, j) * table(i - 1, j + 1) * table(i - 2, j + 2) * table(i - 3, j + 3) * table(i - 4, j + 4) = 32 then msgb

30、ox white win.: whitewin = true end if next j next iend sub 下棋決策算法private sub picture1_mousedown(button as integer, shift as integer, x as single, y as single) 人走 dim a as single dim b as single if sckserver.state = 0 then msgbox 尚未連接,不能下棋! elseif blackturn = false then if (x - 200) mod 500 25

31、0 then a = x + 500 - (x - 200) mod 500 end if if (y - 200) mod 500 250 then b = y + 500 - (y - 200) mod 500 end if i = (a - 200) / 500 j = (b - 200) / 500 上面是鼠標在棋盤所點的具體位置轉(zhuǎn)換成坐標位置 if (table(i, j) = 0) then sendstr = growqdata(i, j, vbwhite) sckserver.senddata sendstr blackturn = true huiqi.enabled = t

32、rue intstep = intstep + 1 intx(intstep) = i inty(intstep) = j color = color + 1 intcolor(color) = w qcolor = vbwhite call drawqz(i, j, qcolor) table(i, j) = 2 judwhite if whitewin then intanswer = msgbox(繼續(xù)下一盤嗎?, vbyesno) if intanswer = vbyes then blackturn = true restart growqp else msgbox 如需保存棋局,請

33、單擊(保存)按鈕 end if end if else msgbox 此處已經(jīng)有棋子,請下別處! end ifend ifend ifend sub 聊天記錄管理算法 if dir(c:serverdatachats服務(wù)次數(shù)記錄.txt) 服務(wù)次數(shù)記錄.txt then open app.path & & datachats & 服務(wù)次數(shù)記錄 & .txt for output as #2 print #2, 0 print #2, date close #2 for n = 0 to 2 filename = app.path & & datachats( & n & ) &

34、date & 服務(wù)聊天記錄 & .txt open filename for output as #1 close #1 next nelse open app.path & & datachats & 服務(wù)次數(shù)記錄 & .txt for input as #3 jlcount = line input #3, jlcount line input #3, d close #3 r = cint(jlcount) if r = 1 then a = date if trim(d) a then r = r + 1 open app.path & & datachats & 服務(wù)次數(shù)記錄 & .

35、txt for output as #4 print #4, r print #4, date close #4 fn = dir(c:serverdatachats( & r & ) & *.txt) oldname = c:serverdatachats & fn newname = c:serverdatachats( & r & ) & date & 服務(wù)聊天記錄 & .txt name oldname as newname filename = app.path & & datachats( & r & ) & date & 服務(wù)聊天記錄 & .txt open filename f

36、or output as #1 print #1, close #1 else fn = dir(c:serverdatachats( & r & ) & *.txt) oldname = c:serverdatachats & fn newname = c:serverdatachats( & r & ) & trim(d) & 服務(wù)聊天記錄 & .txt name oldname as newname filename = app.path & & datachats( & r & ) & trim(d) & 服務(wù)聊天記錄 & .txt open filename for append a

37、s #1 close #1 end if elseif r = 2 then r = r + 1 open app.path & & datachats & 服務(wù)次數(shù)記錄 & .txt for output as #4 print #4, r print #4, date close #4 else r = 0 open app.path & & datachats & 服務(wù)次數(shù)記錄 & .txt for output as #4 print #4, r print #4, date close #4 fn = dir(c:serverdatachats( & r & ) & *.txt) o

38、ldname = c:serverdatachats & fn newname = c:serverdatachats( & r & ) & date & 服務(wù)聊天記錄 & .txt name oldname as newname filename = app.path & & datachats( & r & ) & date & 服務(wù)聊天記錄 & .txt open filename for output as #1 print #1, close #1 end if 下棋記錄管理算法private sub baocun_click()dim c as stringcommo

39、ndialog1.filter = text files(*.txt)|*.txtcommondialog1.filterindex = 1commondialog1.showsavefname = commondialog1.filenameon error goto nohandle open fname for output as #1 for i = 1 to 400 print #1, intx(i); next i print #1, for i = 1 to 400 print #1, inty(i); next i print #1, for i = 0 to 19 for j

40、 = 0 to 19 print #1, table(i, j); next j next i print #1, print #1, blackturn print #1, intstep print #1, color for i = 1 to 400 c = intcolor(i) print #1, c next i print #1, close #1nohandle: exit subend sub第四章 軟件測試4.1 登陸界面設(shè)計登陸窗體login如圖4.1所示:圖4.14.2 下棋界面設(shè)計窗體frmserver如圖4.2所示:圖4.2第五章 軟件測試為了保證軟件的質(zhì)量和可靠性

41、,在軟件編碼完成以后,應(yīng)該對軟件進行測試。測試出程序中存在的錯誤,然后進行修改。5.1 問題的發(fā)現(xiàn)1) 客戶端和服務(wù)器端不能夠聯(lián)機。2) 運行時直接運行游戲下棋主窗體,沒有運行登陸窗體。3) 信息窗口顯示下棋信息也顯示聊天信息。4) 在做申請悔棋和接受對方悔棋時程序段存在錯誤。5) 游戲進行了會出現(xiàn)各種中斷或者是程序員沒有預(yù)想的狀態(tài)。5.2 問題的解決1) 客戶端里的tcpclient.remotehost應(yīng)該是服務(wù)器端的ip地址,而且客戶端和服務(wù)器端兩個的端口應(yīng)該設(shè)置為一樣,此程序localport為1000。2) 首先在工程中建立一個module的類模塊,使登陸窗體和下棋主窗體銜接起來,并

42、且修改工程的屬性,在“通用”設(shè)置里把啟動對象設(shè)置為“sub main”,這樣就解決了窗體運行的問題。3) 客戶端和服務(wù)器端設(shè)置統(tǒng)一的信息數(shù)據(jù)格式,對通訊信息進行了加工,屬于聊天信息是以“l(fā)t”開頭,屬于下棋信息的是以“xq”開頭,這樣就避免了雙方通訊信息的錯亂。4) 做一個允許對方悔棋的子程序和一個己方申請悔棋的子程序,這樣就是編程簡單化,邏輯性強些,從而解決了程序運行不了的問題。5) 針對這個問題,增添了沒有連接時用戶點棋盤會彈出未連接提示、規(guī)定時間內(nèi)沒有連接上會提示重新連接的提示,還有清空聊天內(nèi)容、重開棋局等功能,使用戶體驗程序時感覺更加良好,減少bug。第六章 總結(jié)與體會6.1 總結(jié)本設(shè)計主要是采用tcp/ip網(wǎng)絡(luò)協(xié)議為主要通訊協(xié)議建構(gòu)服務(wù)器端,使用vb提供的winsock控件來實現(xiàn)與客戶端的網(wǎng)絡(luò)通信功能和建立五子棋游戲界面。主要功能是使客戶端能連接到服務(wù)器端,雙方可以通過網(wǎng)絡(luò)對戰(zhàn),并且能夠自動判斷勝負。特點是支持雙方網(wǎng)上聊天功能,還增添了悔棋、復(fù)盤、保存棋局/聊天記錄等功能。本軟件設(shè)計和其它網(wǎng)絡(luò)五子棋軟件相比在

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論