/// <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); }
/// <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(); }
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); }
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(); }