/// <summary> /// 处理连接请求 /// </summary> /// <param name="e"></param> private void processAccept(SocketAsyncEventArgs e) { ClientPeer client = clientPeerPool.Dequeue(); client.SetSocket(e.AcceptSocket); //对得到的客户端对象进行保存,然后处理 //TODO e.AcceptSocket = null; startAccept(e); }
/// <summary> /// 处理连接请求 /// </summary> /// <param name="e"></param> 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); }
/// <summary> /// 处理接收 /// </summary> private void processAccept(SocketAsyncEventArgs e) { //把可以用得线程减少一个,先开启减少一个 ,当我们取内容的时候就调用 acceptSemaphore.WaitOne(); //通过异步来调用是这样子调用的 Socket clientSocket = e.AcceptSocket; // ClientPeer clientPeer = clientPool.Dequeue(); clientPeer.ClientSocket = clientSocket; // startReceive(clientPeer); //然后就可以一直接收客户端得到得数据 //这里是,完成一个,传递e 的可以减少new e 的开销 e.AcceptSocket = null; // 主要是回调 socket.AcceptAynsc startAccept(e); }
/// <summary> /// 处理连接请求 /// </summary> private void ProcessAccept(SocketAsyncEventArgs e) { ///限制线程的访问 计数。 假设客户端100个 每调用一次加一。等到100就等待 有位置就继续 acceptSemaphore.WaitOne(); //得到客户端的对象 //1,原始方法 //Socket socket = e.AcceptSocket; //2,更改方法。 但是每次都需要new 耗费性能。所以新建一个对象池。。。。 //ClientPeer clientPeer = new ClientPeer(); //clientPeer.SetSocket(e.AcceptSocket); //3, ClientPeer clientPeer = clientPeerPool.Dequeue(); clientPeer.clientSocket = e.AcceptSocket; Console.WriteLine("连接的客户端:" + clientPeer.clientSocket.RemoteEndPoint.ToString()); //开始接收数据 StartReceive(clientPeer); //继续进行处理 //一直进行接收客户端发来的数据 伪循环 e.AcceptSocket = null; StartAccept(e); }