示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }