程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#網絡版斗地主——網絡部分實現

C#網絡版斗地主——網絡部分實現

編輯:關於C#

本文是對C#網絡版斗地主的總結,之後還有兩篇,分別介紹地主權限的傳遞和出牌權限的傳遞,還有出牌算法和規則。

服務器使用server類與客戶端通訊,客戶端使用client類與服務器通訊。

當創建游戲時,new出一個server對象,並且開始監聽默認端口“1991”。

然後創建一個線程,用死循環while(true)檢測是否有客戶端連接,如果有的話獲取Client對象,當獲取了兩個Clinet對象後,停止監聽,中斷循環。

服務器獲取了兩個客戶端後,啟動兩個線程“AccpetClient1Data”、“AccpetClient2Data”,使用server中同名方法,分別監聽客戶端1和客戶端2發送的數據。

當加入游戲時,new出一個client對象,並且連接玩家指定的IP,端口默認為1991。

連接上後,啟動線程“AcceptServerData”,使用client中同名方法。

這樣,server端使用方法SendDataForClient向客戶端發送信息,client能夠收到,client端使用SendDataForServer向server端發送信息,Server端也能收到。

值得一提的是,兩個客戶端之間是沒有連接的,他們之間通訊需要通過server端來“代理”。

連接建立好後,客戶端的准備按鈕顯示出來,點擊准備按鈕向服務端發送“OK”字符串,服務器收到後會通過“AccpetClient1Data”、“AccpetClient2Data”這兩個方法識別出來,然後顯示服務器端的開始按鈕。

點擊開始按鈕後,服務器端像客戶端“發送StartPokers+牌組”,發給自己的牌組不需要在網絡中傳輸,所以直接添加到相關的牌組對象中即可。這裡的牌組類要自己寫序列化和反序列化的方法,需要把牌組序列化為byte[]才能在網絡中傳送。

客戶端通過“AcceptServerData”方法讀取並處理“StartPokers+牌組”。處理後的結果是一個PokerGroup對象,把引用傳遞給相應對象就完成發牌了。

後面就是確定地主,出牌權限的傳遞,出出去的牌組的傳遞等等了,也都是使用server和client中的SendDataForServer 和SendDataForClient方法發送byte流,然後使用“AccpetClient1Data”、“AccpetClient2Data”,“AcceptServerData”,完成接受並處理數據。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved