VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • c#网络版斗地主之网络部分实现

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  本文是对C#网络版斗地主的总结,之后还有两篇,分别介绍地主权限的传递和出牌权限的传递,还有出牌算法和规则。

  服务器使用server类与客户端通讯,客户端使用client类与服务器通讯。

C#网络版斗地主——网络部分实现C#网络版斗地主——网络部分实现

  当创建游戏时,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”,完成接受并处理数据。



相关教程