/// <summary>
        /// 当接收到了新的请求的时候执行的操作
        /// </summary>
        /// <param name="obj"></param>
        protected override void ThreadPoolLogin(object obj)
        {
            // 为了提高系统的响应能力,采用异步来实现,即时有数万台设备接入也能应付
            if (obj is Socket socket)
            {
                ModBusState state = new ModBusState( )
                {
                    WorkSocket = socket,
                };

                try
                {
                    state.IpEndPoint = (System.Net.IPEndPoint)socket.RemoteEndPoint;
                    state.IpAddress  = state.IpEndPoint.Address.ToString( );
                }
                catch (Exception ex)
                {
                    LogNet?.WriteException(ToString( ), "Ip信息获取失败", ex);
                }

                if (IsTrustedClientsOnly)
                {
                    // 检查受信任的情况
                    if (!CheckIpAddressTrusted(state.IpAddress))
                    {
                        // 客户端不被信任,退出
                        LogNet?.WriteDebug(ToString( ), $"客户端 [ {state.IpEndPoint} ] 不被信任,禁止登录!");
                        state.WorkSocket.Close( );
                        return;
                    }
                }

                LogNet?.WriteDebug(ToString( ), $"客户端 [ {state.IpEndPoint} ] 上线");

                try
                {
                    state.WorkSocket.BeginReceive(state.HeadByte, 0, 6, SocketFlags.None, new AsyncCallback(ModbusHeadReveiveCallback), state);
                }
                catch (Exception ex)
                {
                    state.WorkSocket?.Close( );
                    LogNet?.WriteException(ToString(), $"客户端 [ {state.IpEndPoint} ] 头子节接收失败!", ex);
                    state = null;
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// 当接收到了新的请求的时候执行的操作
        /// </summary>
        /// <param name="obj"></param>
        protected override void ThreadPoolLogin(object obj)
        {
            // 为了提高系统的响应能力,采用异步来实现,即时有数万台设备接入也能应付
            if (obj is Socket socket)
            {
                ModBusState state = new ModBusState()
                {
                    WorkSocket = socket,
                };

                try
                {
                    state.WorkSocket.BeginReceive(state.HeadByte, 0, 6, SocketFlags.None, new AsyncCallback(ModbusHeadReveiveCallback), state);
                }
                catch (Exception ex)
                {
                    state = null;
                    LogNet?.WriteException(LogHeaderText, "头子节接收失败!", ex);
                }
            }
        }