斗地主服务端设计

来源:互联网 发布:爱福窝软件福币 编辑:程序博客网 时间:2024/04/29 00:58

斗地主服务器端

负责监听的socket

类中三个属性:

       Clients:(ArrayList)所有的连接到服务端的client socket

       Team:(ArrayList)所有加入组的连接服务端的client socket

       notJoinTeamClients:(ArrayList)还没有加入组的连接到服务端的client socket

1.  实例化socket,假定名为listener绑定52134端口,

2.  Listen500---限制client不超过500

3.  Begin Accept异步接受client的连接。

原型:BeginAccept(new AsyncCallback(AcceptCallback),listener)

//参数callbackAsyncCallback 委托,引用在异步操作完成时调用的回调方法。

//AsyncCallback 引用的事件处理程序包含完成客户端异步任务的程序逻辑。

//参数state :包含此请求的状态信息的对象。

4.  AcceptCallback(IAsyncResult ar)原型

/AsyncCallback 使用 IAsyncResult 接口获取异步操作的状态。

Socket listener=(Socket)ar.AsyncState;

//IAsyncResult.AsyncState 属性,此属性返回一个对象。

//该对象是启动异步操作的方法的最后一个参数。

    Socket ClientSock=listener.EndAccept(ar); //得到客户端socket

Clients.Add(ClientSock);

       notJoinTeamClients.Add(ClientSock);

listener.BeginAccept(new AsyncCallback(AcceptCallback),listener);

//表示回到前面第3步循环accept

当前连接的clientsocket开始receive

ClientSock.BeginReceive(Buffer,0,BufferSize,0,new AsyncCallback(ReceiveCallback),ClientSock);

    //把所有的玩家组队信息发给他,供他选择或者自行组建组        Send(ClientSock,AssembleString.AssGroupMsgA(teams.Count,teams));

//把所有的玩家组队信息发给他,供他选择或者自行组建组

//Accept到此结束

5.ReceiveCallback(IAsyncResult ar)原型

Socket ClientSock=(Socket)ar.AsyncState;         

int BytesRead=ClientSock.EndReceive(ar); //结束挂起的异步读取。返回值:接收到的字节数。

    comString = Encoding.UTF8.GetString(Buffer,0,BytesRead);

    //判断它是否已经加入某个组了,如果没加入,则根据它所发消息建立组或者让它加入指明的组

    ProtocolType pt = ParseString.getType(comString);

(未完待续)

原创粉丝点击