我在TcpClient的NetWorkStream两端都有一个带有CryptoStream的客户端/服务器设置。当我直接从NetworkStream读取时,通信效果很好,但是使用CryptoStream,我无法读取任何可用数据块。我正在关闭CryptoStream以导致从服务器调用FlushLastBlock,并且实际上唯一的16字节块(AES加密)显示在客户端。那么,为什么 CryptoStream.Read() 会在有完整的数据块可用时阻止等待数据呢?
附言我已经验证了发送额外的块允许读者读取第一个块。这只是一个错误还是设计使然?
您是否在
发送端的 CryptoStream 上调用了 FlushFinalBlock()?
using (var stream = new MemoryStream())
{
using (var cs = new CryptoStream(stream, your_encryptor, CryptoStreamMode.Write))
{
your_formatter.Serialize(cs, your_graph);
cs.FlushFinalBlock();
your_socket.Send(stream.GetBuffer(), 0, (int)stream.Length);
}
}