/// <summary> /// 持续接收数据 /// </summary> public async void ReceiveData() { byte[] buffer; while (IsAlive) { if (!_networkStream.DataAvailable) { continue; } try { // 读取封包头 var length = _encryptor.IvLength; buffer = new byte[length]; if (await _networkStream.ReadAsync(buffer, 0, length) == length) { length = MapleCryptograph.GetPacketLength(buffer); } // 通过收取到的封包头计算数据长度,如果比缓冲区还长则停止会话 // 如果检测出封包头不满足约束条件,则停止会话 if (length > _client.ReceiveBufferSize || !_decryptor.IsValidHeader(buffer)) { Dispose(); return; } // 读取真正内容 buffer = new byte[length]; if (await _networkStream.ReadAsync(buffer, 0, length) == length) { _decryptor.Transform(buffer); OnDataReceived(this, new DataReceivedEventArgs { ReceivedData = buffer }); } } catch (Exception e) { Debug.WriteLine($"会话:读取数据出错,错误信息 {e.Message}"); } } }
private async void Receive() { if (!mNetworkStream.CanRead) { this.Close(); return; } while (IsAlive) { if (!mNetworkStream.DataAvailable) { continue; } var length = 4; mBuffer = new byte[length]; if (await mNetworkStream.ReadAsync(mBuffer, 0, length) == length) { length = MapleCryptograph.GetPacketLength(mBuffer); } if (length > mSocket.ReceiveBufferSize || !mRecvCipher.CheckServerPacket(mBuffer, 0)) { this.Close(); return; } mBuffer = new byte[length]; if (await mNetworkStream.ReadAsync(mBuffer, 0, length) == length) { mRecvCipher.Transform(mBuffer); Dispatch(mBuffer); } } }