C網(wǎng)絡(luò)應(yīng)用編程課程設(shè)計(jì)_第1頁(yè)
C網(wǎng)絡(luò)應(yīng)用編程課程設(shè)計(jì)_第2頁(yè)
C網(wǎng)絡(luò)應(yīng)用編程課程設(shè)計(jì)_第3頁(yè)
C網(wǎng)絡(luò)應(yīng)用編程課程設(shè)計(jì)_第4頁(yè)
C網(wǎng)絡(luò)應(yīng)用編程課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、院(系):專(zhuān)業(yè)班級(jí):姓名:學(xué)號(hào):組員:日期:成績(jī):一、課程設(shè)計(jì)目標(biāo)1. 通過(guò)C#網(wǎng)絡(luò)編程的課程設(shè)計(jì),能夠增強(qiáng)我們對(duì)C#網(wǎng)絡(luò)編程的認(rèn)識(shí),更加牢固的掌握網(wǎng)絡(luò)編程的相關(guān)知識(shí)。2. 綜合運(yùn)用學(xué)習(xí)到的理論知識(shí),提高實(shí)踐能力。3. 通過(guò)小組討論形式對(duì)任務(wù)進(jìn)行分解,提出實(shí)現(xiàn)方案,制定計(jì)劃,小組成員分工協(xié)作,共同完成課程設(shè)計(jì)題目,培養(yǎng)團(tuán)隊(duì)合作能力。4. 課程設(shè)計(jì)期間,通過(guò)對(duì)問(wèn)題的分析查找資料,培養(yǎng)資料查詢(xún)以及運(yùn)用現(xiàn)代信息技術(shù)獲取相關(guān)信息并進(jìn)行歸納總結(jié)的基本能力。5. 與同學(xué)討論,互相學(xué)習(xí),提升個(gè)人學(xué)習(xí)能力。二、課程設(shè)計(jì)內(nèi)容1課程設(shè)計(jì)的內(nèi)容參考C#網(wǎng)絡(luò)應(yīng)用編程實(shí)驗(yàn)指導(dǎo)與開(kāi)發(fā)實(shí)例,編寫(xiě)一個(gè)網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋游戲,簡(jiǎn)單

2、的實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋游戲的基本功能。1.2 由于和小組成員分工合作,本人負(fù)責(zé)客戶(hù)端方面代碼。因此,本課程設(shè)計(jì)報(bào)告主要涉及服務(wù)器端的內(nèi)容。并且把重點(diǎn)放在了線(xiàn)程管理,服務(wù)器如何管理多個(gè)玩家,服務(wù)器和客戶(hù)端如何進(jìn)行通信等等。2原理介紹(服務(wù)器與客戶(hù)端通信描述)網(wǎng)絡(luò)編程的關(guān)鍵是服務(wù)器和客戶(hù)端如何通信,當(dāng)服務(wù)器和客戶(hù)端建立連接后,服務(wù)器或客戶(hù)端當(dāng)接收到對(duì)方發(fā)送過(guò)來(lái)的信息后,要對(duì)接收的信息做出反應(yīng)。為了讓通信雙方都能理解對(duì)方發(fā)送過(guò)來(lái)的信息含義,必須事先規(guī)定每條信息的格式以及信息的含義,在本例中,規(guī)定任何一條信息,都必須以命令開(kāi)頭,命令后面跟上需要的參數(shù)。命令和參數(shù)以及各參數(shù)之間均用逗號(hào)分隔。這樣接收方接收

3、到信息后,才能理解,并且根據(jù)參數(shù)可作出相應(yīng)的反應(yīng)。3開(kāi)發(fā)環(huán)境及技術(shù)介紹3.1 開(kāi)發(fā)環(huán)境:Microsoft Visual Studio 2008 Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代開(kāi)發(fā)工具,代號(hào)“Orcas”,是對(duì)Visual Studio 2005一次及時(shí)、全面的升級(jí)。VS2008引入了250多個(gè)新特性,整合了對(duì)象、關(guān)系型數(shù)據(jù)、XML的訪(fǎng)問(wèn)方式,語(yǔ)言更加簡(jiǎn)潔。使用Visual Studio 2008可以高效開(kāi)發(fā)Windows應(yīng)用。設(shè)計(jì)器中可以實(shí)時(shí)反映變更,XAML中智能感知功能可以提高開(kāi)發(fā)效

4、率。同時(shí)Visual Studio 2008支持項(xiàng)目模板、調(diào)試器和部署程序。Visual Studio 2008可以高效開(kāi)發(fā)Web應(yīng)用,集成了AJAX 1.0,包含AJAX項(xiàng)目模板,它還可以高效開(kāi)發(fā)Office應(yīng)用和Mobile應(yīng)用。3.2 引用命名空間以及相關(guān)類(lèi) 命名空間: 除了一些基本的,本例中還引用了一些其他的命名空間,如下:命名空間包含允許讀寫(xiě)文件和數(shù)據(jù)流的類(lèi)型以及提供基本文件和目錄支持的類(lèi)型。命名空間為需要嚴(yán)密控制網(wǎng)絡(luò)訪(fǎng)問(wèn)的開(kāi)發(fā)人員提供了 Windows Sockets (Winsock) 接口的托管實(shí)現(xiàn)。 、 和  類(lèi)封裝有關(guān)創(chuàng)建到 Inte

5、rnet 的 TCP 和 UDP 連接的詳細(xì)信息。 用于多線(xiàn)程編程,對(duì)線(xiàn)程進(jìn)行管理,如創(chuàng)建線(xiàn)程、啟動(dòng)線(xiàn)程、終止線(xiàn)程、合并線(xiàn)程等等。 該命名空間為Internet網(wǎng)絡(luò)上使用的多種協(xié)議提供了方便的編程接口,利用這個(gè)命名空間提供的類(lèi),不需要考慮所使用協(xié)議的具體細(xì)節(jié),就能很快實(shí)現(xiàn)具體功能。System.Windows.Forms 命名空間包含用于創(chuàng)建基于 Windows 的應(yīng)用程序的類(lèi),以充分利用 Microsoft Windows 操作系統(tǒng)中提供的豐富的用戶(hù)界面功能相關(guān)類(lèi): 類(lèi),用特定的編碼將基元數(shù)據(jù)類(lèi)型讀作二進(jìn)制值。類(lèi),以二進(jìn)制形式將基元類(lèi)型寫(xiě)入流,并支持用特定的編碼寫(xiě)入字符串。類(lèi),偵聽(tīng)

6、來(lái)自 TCP 網(wǎng)絡(luò)客戶(hù)端的連接。Thread類(lèi),創(chuàng)建并控制線(xiàn)程,設(shè)置其優(yōu)先級(jí)并獲取其狀態(tài)。IPaddress 類(lèi),提供網(wǎng)際協(xié)議 (IP) 地址。IPEndPoint類(lèi),將網(wǎng)絡(luò)端點(diǎn)表示為 IP 地址和端口號(hào)。界面設(shè)計(jì): 使用的控件:(1)兩個(gè)button負(fù)責(zé)啟動(dòng)和終止服務(wù)。(2)listBox顯示客戶(hù)狀態(tài)信息以及服務(wù)器與客戶(hù)端通信的內(nèi)容。(3)兩個(gè)textBox控件,分別控制游戲室允許進(jìn)入的最多人數(shù)和游戲室同時(shí)開(kāi)出的房間數(shù)。整體界面如圖所示4服務(wù)器端主要代碼介紹 運(yùn)行VS,新建一個(gè)名為GobangServer的Windows應(yīng)用程序項(xiàng)目。4.1 添加一個(gè)User.cs類(lèi),表示所有連接到服務(wù)器的客

7、戶(hù)。代碼如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Sockets;using System.IO;namespace GobangServerclassUser publicreadonlyTcpClient client;publicreadonlyStreamReader sr;publicreadonlyStreamWriter sw;publicstring userName;public User(TcpClient cli

8、ent) this.client = client;this.userName = ""NetworkStream netStream = client.GetStream(); sr = newStreamReader(netStream, System.Text.Encoding.Default); sw = newStreamWriter(netStream, System.Text.Encoding.Default); 4.2 添加一個(gè)名為Player.cs的類(lèi),表示坐在游戲桌兩邊的玩家,代碼如下:using System;using System.Collecti

9、ons.Generic;using System.Linq;using System.Text;namespace GobangServerclassPlayer privateUser user;publicUser GameUser get return user; set user = value; privatebool start;publicbool Start get return start; set start = value; public Player() start = false; user = null; 4.3 添加一個(gè)名為GobangBoard.cs的類(lèi),表示棋

10、盤(pán),代碼如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace GobangServerclassGobangBoard publicconstint None = -1; /無(wú)棋子publicconstint Black = 0; /黑色棋子publicconstint White = 1; /白色棋子privateint, grid = newint15, 15; /15*15的方格/<summary>/ 棋盤(pán)/</summary>p

11、ublicint, Grid get return grid; privateint nextIndex;publicint NextIndex / 應(yīng)該黑方放棋子還是白方放棋子 get return nextIndex; set nextIndex = value; public GobangBoard()/構(gòu)造函數(shù) InitializeBoard(); publicvoid InitializeBoard() / 將15*15的方格中的每個(gè)交叉點(diǎn)均設(shè)置為無(wú)棋子 for (int i = 0; i <= grid.GetUpperBound(0); i+) for (int j = 0

12、; j <= grid.GetUpperBound(1); j+) gridi, j = None; nextIndex = Black; publicbool IsExist(int i, int j) / 判斷放棋子的位置是否已有棋子 if (gridi, j != None) returntrue; else returnfalse; publicbool IsWin(int i, int j) / 判斷棋子落下后是否獲勝 /與方格的第ij交叉點(diǎn)向四個(gè)方向的連子數(shù),依次是水平,垂直,左上右下,左下右上int numbers = newint4; numbers0 = GetRowN

13、umber(i, j); numbers1 = GetColumnNumber(i, j); numbers2 = GetBacklashNumber(i, j); numbers3 = GetSlashNumber(i, j);for (int k = 0; k < numbers.Length; k+) /檢查是否獲勝 if (Math.Abs(numbersk) = 5) returntrue; returnfalse; / 判斷橫向相同顏色的棋子個(gè)數(shù)privateint GetRowNumber(int i, int j) int num = 1; /連子個(gè)數(shù)int x = i

14、+ 1; /向右檢查while (x < 15) if (gridx, j = gridi, j) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán) num+; x+; else break; x = i - 1; /向左檢查while (x >= 0) if (gridx, j = gridi, j) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán) num+; x-;else break; return num; privateint GetColumnNumber(int i, int j) / 判斷縱向相同顏色的棋子個(gè)數(shù) int num = 1; /連子個(gè)數(shù)int y = j + 1; /向下檢查whil

15、e (y < 15) if (gridi, y = gridi, j) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán) num+; y+;else break; /向上檢查 y = j - 1;while (y >= 0) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán)if (gridi, y = gridi, j) num+; y-; else break; return num; / 判斷左上到右下相同顏色的棋子個(gè)數(shù)privateint GetBacklashNumber(int i, int j) int num = 1; /連子個(gè)數(shù)int x = i + 1; /右下方向int y = j + 1;w

16、hile (x < 15 && y < 15) if (gridx, y = gridi, j) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán) num+; x+; y+; else break; /左上方向(x-,y-) x = i - 1; y = j - 1;/不超出棋格while (x >= 0 && y >= 0) if (gridx, y = gridi, j) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán) num+; x-; y-; else break; return num; privateint GetSlashNumber(int i, in

17、t j) / 判斷左下到右上相同顏色的棋子個(gè)數(shù) int num = 1; /連子個(gè)數(shù)int x = i - 1;int y = j + 1;while (x >= 0 && y < 15) if (gridx, y = gridi, j) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán) num+; x-; y+; else break; x = i + 1; y = j - 1;while (x < 15 && y >= 0) /前方棋子與ij點(diǎn)不同時(shí)跳出循環(huán)if (gridx, y = gridi, j) num+; x+; y-; else bre

18、ak; return num; 4.4 添加一個(gè)名為Service.cs的類(lèi),代碼如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.IO;namespace GobangServer/ 顯示或發(fā)送信息classService privateListBox listbox;privatedelegatevoidAddListBoxItemCallba

19、ck(string str);privateAddListBoxItemCallback addListBoxItemCallback;public Service(ListBox listbox) this.listbox = listbox; addListBoxItemCallback = newAddListBoxItemCallback(AddListBoxItem); publicvoid AddListBoxItem(string str) /比較調(diào)用AddListBoxItem方法的線(xiàn)程和創(chuàng)建listBox的線(xiàn)程是否為同一個(gè)線(xiàn)程if (listbox.InvokeRequire

20、d = true) listbox.Invoke(addListBoxItemCallback, str); else if (listbox.IsDisposed = false) listbox.Items.Add(str); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); / 將信息發(fā)送給指定的客戶(hù)publicvoid SendToOne(User user, string str) try user.sw.WriteLine(str); user.sw.Flush(); AddListB

21、oxItem(string.Format("向0發(fā)送1", user.userName, str); catch AddListBoxItem(string.Format("向0發(fā)送信息失敗", user.userName); / 將信息發(fā)送給指定房間的所有人publicvoid SendToRoom(GameRoom gameRoom, string str) /向玩家發(fā)送for (int i = 0; i < gameRoom.gamePlayer.Length; i+) if (gameRoom.gamePlayeri.GameUser !=

22、 null) SendToOne(gameRoom.gamePlayeri.GameUser, str); /向旁觀(guān)者發(fā)送for (int i = 0; i < gameRoom.lookOnUser.Count; i+) SendToOne(gameRoom.lookOnUseri, str); publicvoid SendToAll(System.Collections.Generic.List<User> userList, string str) for (int i = 0; i < userList.Count; i+) SendToOne(userLis

23、ti, str); 4.5 添加一個(gè)名為GameRoom.cs的類(lèi),游戲室內(nèi)的每個(gè)小房間,代碼如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Net.Sockets;using System.Windows.Forms;namespace GobangServerclassGameRoom / 進(jìn)入房間的旁觀(guān)者publicList<User> lookOnUser = newList<User>

24、;();/ 坐在玩家位置上的黑白兩個(gè)游戲者publicPlayer gamePlayer = newPlayer2;/ 黑方玩家publicPlayer BlackPlayer get return gamePlayer0; set gamePlayer0 = value; / 白方玩家publicPlayer WhitePlayer get return gamePlayer1; set gamePlayer1 = value; privateGobangBoard gameBoard = newGobangBoard();publicGobangBoard GameBoard get re

25、turn gameBoard; / 向listbox中添加顯示信息以及向客戶(hù)發(fā)送信息privateListBox listbox;privateService service;/構(gòu)造函數(shù)public GameRoom(ListBox listbox) this.listbox = listbox; gamePlayer0 = newPlayer(); gamePlayer1 = newPlayer(); service = newService(listbox);/將棋盤(pán)上的棋子全部清除 gameBoard.InitializeBoard(); / 放置棋子publicvoid SetChes

26、s(int i, int j, int chessColor) /發(fā)送格式:SetChess,行,列,顏色 gameBoard.Gridi, j = chessColor; gameBoard.NextIndex = gameBoard.NextIndex = 0 ? 1 : 0; service.SendToRoom(this, string.Format("SetChess,0,1,2", i, j, chessColor);if (gameBoard.IsWin(i, j) ShowWin(chessColor); else service.SendToRoom(this, "NextChess," + gameBoard.NextIndex); privatevoid ShowWin(int chessColor) gamePlayer0.Start = false; gamePlayer1.Start = false; gameBoard.InitializeBoard(); service.SendToRoom(this, string.Format("Win,0", chessColor); 4.6 重命名Form1.cs為FormServer.cs,修改代碼如下:using S

溫馨提示

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

評(píng)論

0/150

提交評(píng)論