WEB开发网
开发学院软件开发C语言 C#网络版斗地主——网络部分实现 阅读

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

 2009-06-08 08:32:31 来源:WEB开发网   
核心提示:本文是对C#网络版斗地主的总结,之后还有两篇,C#网络版斗地主——网络部分实现,分别介绍地主权限的传递和出牌权限的传递,还有出牌算法和规则,然后使用“AccpetClient1Data”、“AccpetClient2Data”,“AcceptServerDat

本文是对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”,完成接受并处理数据。

系列文章:

C#写的网络版斗地主

C#网络版斗地主——地主权限的传递

C#网络版斗地主——出牌权限的传递

Tags:网络 斗地主 网络

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接