示例#1
0
        private void ProcessAccept(SocketAsyncEventArgs acceptEventArgs)
        {
            App.Logger.Info("Client connection accepted. Local Address: {0}, Remote Address: {1}",
                            acceptEventArgs.AcceptSocket.LocalEndPoint, acceptEventArgs.AcceptSocket.RemoteEndPoint);

            AsyncSocketUserToken userToken = AsyncSocketUserTokenPool.Pop();

            AsyncSocketUserTokenList.Add(userToken); //添加到正在连接列表
            userToken.ConnectSocket   = acceptEventArgs.AcceptSocket;
            userToken.ConnectDateTime = DateTime.Now;

            try
            {
                bool willRaiseEvent = userToken.ConnectSocket.ReceiveAsync(userToken.ReceiveEventArgs); //投递接收请求
                if (!willRaiseEvent)
                {
                    lock (userToken)
                    {
                        ProcessReceive(userToken.ReceiveEventArgs);
                    }
                }
            }
            catch (Exception E)
            {
                App.Logger.Error("Accept client {0} error, message: {1}", userToken.ConnectSocket, E.Message);
                App.Logger.Error(E.StackTrace);
            }

            StartAccept(acceptEventArgs); //把当前异步事件释放,等待下次连接
        }
示例#2
0
        private void ProcessAccept(SocketAsyncEventArgs acceptEventArgs)
        {
            Console.WriteLine("Client connection accepted. Local Address: {0}, Remote Address: {1}",
                              acceptEventArgs.AcceptSocket.LocalEndPoint, acceptEventArgs.AcceptSocket.RemoteEndPoint);

            AsyncSocketUserToken userToken = AsyncSocketUserTokenPool.Pop();

            AsyncSocketUserTokenList.Add(userToken);
            userToken.ConnectSocket   = acceptEventArgs.AcceptSocket;
            userToken.ConnectDateTime = DateTime.Now;

            try
            {
                bool willRaiseEvent = userToken.ConnectSocket.ReceiveAsync(userToken.ReceiveEventArgs);
                if (!willRaiseEvent)
                {
                    lock (userToken)
                    {
                        ProcessReceive(userToken.ReceiveEventArgs);
                    }
                }
            }
            catch (Exception E)
            {
                Console.WriteLine("Accept client {0} error, message: {1}", userToken.ConnectSocket, E.Message);
                Console.WriteLine(E.StackTrace);
            }

            StartAccept(acceptEventArgs);
        }
示例#3
0
        public virtual void CloseSocket(AsyncUserToken iSocketToken)
        {
            if (iSocketToken.Socket == null)
            {
                return;
            }
            string socketInfo = string.Format("Local Address: {0} Remote Address: {1}", iSocketToken.Socket.LocalEndPoint,
                                              iSocketToken.SendEventArgs.RemoteEndPoint);

            App.Logger.Info("Connection disconnected. {0}", socketInfo);
            try
            {
                iSocketToken.Socket.Shutdown(SocketShutdown.Both);
            }
            catch (Exception e)
            {
                App.Logger.Info("CloseSocket Disconnect {0} error, message: {1}", socketInfo, e.Message);
            }
            iSocketToken.Socket.Close();
            iSocketToken.Socket = null; //释放引用,并清理缓存,包括释放协议对象等资源
            iSocketToken.Clear();
            AsyncSocketUserTokenUsed.Remove(iSocketToken.OwnerID1);
            AsyncSocketUserTokenPool.Push(iSocketToken);

            MaxNumberAccepted.Release();
        }
示例#4
0
        private void ProcessAccept(SocketAsyncEventArgs iSocketAsyncEventArgs)
        {
            if (iSocketAsyncEventArgs.SocketError == SocketError.Success)
            {
                App.Logger.Info("Client connection accepted. Local Address: {0}, Remote Address: {1}",
                                iSocketAsyncEventArgs.AcceptSocket.LocalEndPoint, iSocketAsyncEventArgs.AcceptSocket.RemoteEndPoint);

                AsyncUserToken oSocketToken = AsyncSocketUserTokenPool.Pop();
                AsyncSocketUserTokenUsed.Add(oSocketToken.OwnerID1, oSocketToken); //添加到正在连接列表
                oSocketToken.Socket          = iSocketAsyncEventArgs.AcceptSocket;
                oSocketToken.ConnectDateTime = DateTime.Now;
                try
                {
                    bool willRaiseEvent = oSocketToken.Socket.ReceiveAsync(oSocketToken.RecvEventArgs); //投递接收请求
                    if (!willRaiseEvent)
                    {
                        OnRecvAsync(oSocketToken.RecvEventArgs);
                    }
                }
                catch (Exception e)
                {
                    App.Logger.Error("Accept client {0} error, message: {1}", oSocketToken.Socket, e.Message);
                    App.Logger.Error(e.StackTrace);
                }
            }
            StartAccept(iSocketAsyncEventArgs); //把当前异步事件释放,等待下次连接
        }
示例#5
0
        public virtual void CloseSocket(AsyncUserToken socketToken)
        {
            if (socketToken.Socket == null)
            {
                return;
            }
            string socketInfo = string.Format("本地地址: {0} 远程地址: {1}", socketToken.Socket.LocalEndPoint,
                                              socketToken.Socket.RemoteEndPoint);

            try
            {
                socketToken.Socket.Shutdown(SocketShutdown.Both);
                App.Info("关闭连接. {0}", socketInfo);
            }
            catch (Exception e)
            {
                App.Info("关闭连接 {0} 错误, 消息: {1}", socketInfo, e.Message);
            }
            socketToken.Socket.Close();
            socketToken.Socket = null; //释放引用,并清理缓存,包括释放协议对象等资源
            socketToken.Clear();

            AsyncSocketUserTokenUsed.Remove(socketToken);
            AsyncSocketUserTokenPool.Push(socketToken);

            MaxNumberAccepted.Release();

            Closed?.Invoke(socketToken); // 连接关闭回调
        }
示例#6
0
        private void ProcessAccept(SocketAsyncEventArgs eventArgs)
        {
            if (eventArgs.SocketError == SocketError.Success)
            {
                App.Info("客户端已连接. 本地地址: {0}, 远程地址: {1}",
                         eventArgs.AcceptSocket.LocalEndPoint, eventArgs.AcceptSocket.RemoteEndPoint);

                AsyncUserToken socketToken = AsyncSocketUserTokenPool.Pop();
                AsyncSocketUserTokenUsed.Add(socketToken); //添加到正在连接列表
                socketToken.Socket          = eventArgs.AcceptSocket;
                socketToken.ConnectDateTime = DateTime.Now;
                Connected?.Invoke(socketToken); // 连接回调
                try
                {
                    bool willRaiseEvent = socketToken.Socket.ReceiveAsync(socketToken.RecvEventArgs); //投递接收请求
                    if (!willRaiseEvent)
                    {
                        OnRecvAsync(socketToken.RecvEventArgs);
                    }
                }
                catch (Exception e)
                {
                    App.Error("接收客户端连接 {0} 错误, 消息: {1}", socketToken.Socket, e.Message);
                }
            }
            StartAccept(eventArgs); //把当前异步事件释放,等待下次连接
        }
示例#7
0
        public void CloseSocket(AsyncSocketUserToken userToken)
        {
            if (userToken.ConnectSocket == null)
            {
                return;
            }
            string socketInfo = string.Format("Local Address: {0} Remote Address: {1}", userToken.ConnectSocket.LocalEndPoint,
                                              userToken.SendEventArgs.RemoteEndPoint);

            App.Logger.Info("Connection disconnected. {0}", socketInfo);
            try
            {
                userToken.ConnectSocket.Shutdown(SocketShutdown.Both);
            }
            catch (Exception E)
            {
                App.Logger.Info("CloseSocket Disconnect {0} error, message: {1}", socketInfo, E.Message);
            }
            userToken.ConnectSocket.Close();
            userToken.ConnectSocket = null; //释放引用,并清理缓存,包括释放协议对象等资源
            userToken.TokenClose();

            MaxNumberAccepted.Release();
            AsyncSocketUserTokenPool.Push(userToken);
            AsyncSocketUserTokenList.Remove(userToken);
        }
示例#8
0
        public AsyncSocketServer(int numConnections)
        {
            m_numConnections = numConnections;
            m_receiveBufferSize = ProtocolConst.ReceiveBufferSize;

            m_asyncSocketUserTokenPool = new AsyncSocketUserTokenPool(numConnections);
            m_asyncSocketUserTokenList = new AsyncSocketUserTokenList();
            m_maxNumberAcceptedClients = new Semaphore(numConnections, numConnections);
        }
示例#9
0
 public SocketClient() : base(1)
 {
     UserToken = AsyncSocketUserTokenPool.Pop();
     AsyncSocketUserTokenList.Add(UserToken);
 }