Пример #1
0
        /// <summary>
        /// 用来开启服务器
        /// </summary>
        /// <param name="port"></param>
        /// <param name="maxCount"></param>
        public void Start(int port, int maxCount)
        {
            try
            {
                acceptSemaphore = new Semaphore(maxCount, maxCount);

                serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));
                serverSocket.Listen(maxCount);
                clientPeerPool = new ClientPeerPool(maxCount);
                ClientPeer tmpClientPeer = null;
                for (int i = 0; i < maxCount; i++)
                {
                    tmpClientPeer = new ClientPeer();

                    tmpClientPeer.ReceiveArgs.Completed += Receive_Completed;
                    tmpClientPeer.snedDisconnect         = DisConnect;
                    tmpClientPeer.receiveCompleted       = ReceiveCompleted;
                    clientPeerPool.EnQueue(tmpClientPeer);
                }

                StartAccept(null);
                Console.WriteLine("服务器启动成功。。。");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="client">断开的连接对象</param>
        /// <param name="reason"></param>
        public void DisConnect(ClientPeer client, string reason)
        {
            try
            {
                //断开连接清空数据 包括clientpeer的缓存  socket对象
                if (client == null)
                {
                    throw new Exception("当前客户端为空,无法断开连接");
                }

                //通知应用层断开连接 TODO



                client.DisConnect();
                //连接池 回收
                clientPeerPool.EnQueue(client);
                //信号量  回复
                acceptSemaphore.Release();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }