Example #1
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();
        }
Example #2
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); // 连接关闭回调
        }
Example #3
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);
        }
Example #4
0
        public void Connect(string host, int port)
        {
            IPEndPoint oIPEndPoint = new IPEndPoint(IPAddress.Parse(host), port);

            ListenSocket = new Socket(oIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            SocketAsyncEventArgs connectEventArgs = new SocketAsyncEventArgs()
            {
                RemoteEndPoint = oIPEndPoint, AcceptSocket = ListenSocket
            };

            connectEventArgs.Completed += ConnectEventArg_Completed;

            MaxNumberAccepted.WaitOne();
            StartConnect(connectEventArgs);
        }
Example #5
0
        public void StartAccept(SocketAsyncEventArgs iSocketAsyncEventArgs)
        {
            if (iSocketAsyncEventArgs == null)
            {
                iSocketAsyncEventArgs            = new SocketAsyncEventArgs();
                iSocketAsyncEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(AcceptEventArg_Completed);
            }
            else
            {
                iSocketAsyncEventArgs.AcceptSocket = null; //释放上次绑定的Socket,等待下一个Socket连接
            }
            MaxNumberAccepted.WaitOne();                   //获取信号量
            bool willRaiseEvent = ListenSocket.AcceptAsync(iSocketAsyncEventArgs);

            if (!willRaiseEvent)
            {
                ProcessAccept(iSocketAsyncEventArgs);
            }
        }
Example #6
0
        public void StartAccept(SocketAsyncEventArgs acceptEventArgs)
        {
            if (acceptEventArgs == null)
            {
                acceptEventArgs            = new SocketAsyncEventArgs();
                acceptEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(AcceptEventArg_Completed);
            }
            else
            {
                acceptEventArgs.AcceptSocket = null;
            }

            MaxNumberAccepted.WaitOne();
            bool willRaiseEvent = ListenSocket.AcceptAsync(acceptEventArgs);

            if (!willRaiseEvent)
            {
                ProcessAccept(acceptEventArgs);
            }
        }