Esempio n. 1
0
        //处理连接请求
        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);
        }
Esempio n. 2
0
 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;
     }
 }
Esempio n. 3
0
 //回收连接对象
 public void Enqueue(ClientPeer client)
 {
     clientPeerQueue.Enqueue(client);
 }
Esempio n. 4
0
 //一条数据解析完成的处理
 private void receiveCompleted(ClientPeer client, SocketMsg msg)
 {
     //给应用层让其处理
     application.OnReceive(client, msg);
 }