//处理连接请求 private void processAccept(SocketAsyncEventArgs e) { //限制线程的访问 acceptSemaphore.WaitOne(); //得到客户端对象 //Socket clientSocket = e.AcceptSocket; ClientPeer client = clientPeerPool.Dequeue(); client.ClientSocket = e.AcceptSocket; Console.WriteLine("客户端连接成功:" + client.ClientSocket.RemoteEndPoint.ToString()); //开始接收数据 startReceive(client); e.AcceptSocket = null; startAccept(e); }
public void Disconnect(ClientPeer client, string reason) { try { //清空数据 if (client == null) { throw new Exception("当前指定的客户端连接对象为空,无法断开连接"); } Console.WriteLine(client.ClientSocket.RemoteEndPoint.ToString() + "客户端断开连接 原因:" + reason); //通知应用层 这个客户断开连接了 application.OnDisconnect(client); client.Disconnect(); //回收对象方便下次使用 clientPeerPool.Enqueue(client); acceptSemaphore.Release(); } catch (Exception e) { Console.WriteLine(e.Message); throw; } }
//回收连接对象 public void Enqueue(ClientPeer client) { clientPeerQueue.Enqueue(client); }
//一条数据解析完成的处理 private void receiveCompleted(ClientPeer client, SocketMsg msg) { //给应用层让其处理 application.OnReceive(client, msg); }