/// <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); } }
/// <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); } }