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

源码在上一篇文章:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/06/1497673.html

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

地主权限的传递:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/07/1498097.html

出牌权限的传递:http://www.cnblogs.com/zhubenwuzui/archive/2009/06/08/1498369.html

服务器使用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”,完成接受并处理数据。

转载于:https://www.cnblogs.com/DreamCreator/archive/2009/06/07/1497968.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值