コード例 #1
0
        /// <summary>
        /// TCP客户端异步接收数据
        /// </summary>
        /// <param name="result"></param>
        private void Received(IAsyncResult result)
        {
            var client = (Socket)result.AsyncState;

            lock (ReceiveBuffer)
            {
                int readCount;
                try
                {
                    readCount = client.EndReceive(result);

                    var array = ReceiveBuffer.Last().Array;
                    for (var i = 0; i < readCount; i++)
                    {
                        ProcessBuffer.Add(array[i]);
                    }
                }
                catch (Exception ex) when(ex is ObjectDisposedException || ex is SocketException)
                {
                    if (ex.Message == "远程主机强迫关闭了一个现有的连接。")
                    {
                        client.Close();
                        IsConnected = false;
                    }
                    else
                    {
                        ParentWindow.DispatcherAddReportData(ReportMessageType.Warning, ReportMessageEnum.ClientReceiveException);
                        LogService.Instance.Error(ReportMessageEnum.ClientReceiveException, ex);
                    }

                    OnClientDisconnect();
                    return;
                }

                if (readCount <= 0)
                {
                    OnClientDisconnect();
                    ParentWindow.DispatcherAddReportData(ReportMessageType.Info, ReportMessageEnum.GetEmptyData);
                    client.Close(0);
                    IsConnected = false;
                    return;
                }
            }

            OnReceivedData();

            client.BeginReceive(ReceiveBuffer, SocketFlags.None, Received, client);
        }
コード例 #2
0
        /// <summary>
        /// TCP客户端异步接收数据
        /// </summary>
        /// <param name="result">同步接受结果</param>
        public void Received(IAsyncResult result)
        {
            if (_isDisposed)
            {
                return;
            }

            var client = (Socket)result.AsyncState;

            lock (ReceiveBuffer)
            {
                try
                {
                    var readCount = client.EndReceive(result);

                    var array = ReceiveBuffer.Last().Array;
                    lock (_processBuffer)
                    {
                        for (var i = 0; i < readCount; i++)
                        {
                            _processBuffer.Add(array[i]);
                        }
                    }

                    LastAliveDateTime = DateTime.Now;

                    if (readCount != 0)
                    {
                        client.BeginReceive(ReceiveBuffer, SocketFlags.None, Received, client);
                    }
                    else
                    {
                        Close();
                        return;
                    }
                }
                catch (Exception ex) when(ex is ObjectDisposedException || ex is SocketException)
                {
                    AdminReportService.Instance.Warning($"接收客户端数据错误!套接字:{ReceiverName}", ex);
                    OnClientDisconnect();
                    return;
                }
            }

            OnReceivedData();
        }
コード例 #3
0
        private void Received(IAsyncResult result)
        {
            var client = (Socket)result.AsyncState;

            lock (ReceiveBuffer)
            {
                int readCount;
                try
                {
                    readCount = client.EndReceive(result);

                    var array = ReceiveBuffer.Last().Array;
                    for (var i = 0; i < readCount; i++)
                    {
                        ProcessBuffer.Add(array[i]);
                    }
                }
                catch (Exception ex)
                {
                    if (ex.Message == "远程主机强迫关闭了一个现有的连接。")
                    {
                        client.Close();
                        IsConnected = false;
                    }

                    OnClientDisconnect();
                    return;
                }

                if (readCount <= 0)
                {
                    OnClientDisconnect();
                    client.Close(0);
                    IsConnected = false;
                    return;
                }
            }

            OnReceivedData();

            client.BeginReceive(ReceiveBuffer, SocketFlags.None, Received, client);
        }
コード例 #4
0
        private void Received(IAsyncResult result)
        {
            var client = (Socket)result.AsyncState;

            lock (ReceiveBuffer)
            {
                try
                {
                    var readCount = client.EndReceive(result);
                    if (readCount == 0)
                    {
                        client.Disconnect(true);
                        InvalidConnection();
                        return;
                    }

                    if (AuthStatus == AuthenticationStatus.AuthFailed ||
                        AuthStatus == AuthenticationStatus.ClientNotRegistered)
                    {
                        return;
                    }
                    var array = ReceiveBuffer.Last().Array;
                    lock (_processBuffer)
                    {
                        for (var i = 0; i < readCount; i++)
                        {
                            _processBuffer.Add(array[i]);
                        }
                    }
                    LastAliveDateTime = DateTime.Now;
                    client.BeginReceive(ReceiveBuffer, SocketFlags.None, Received, client);
                }
                catch (Exception)
                {
                    InvalidConnection();
                    return;
                }
            }

            OnDataReceived();
        }