我在TcpClient的NetWorkStream两端都有一个使用CryptoStream的客户端/服务器设置。当我直接从NetworkStream读取时,通信工作非常有效,但是使用CryptoStream我无法读取单个可用数据块。我正在关闭CryptoStream以使服务器调用FlushLastBlock,实际上在客户端显示了唯一的16字节块(AES加密)。那么,当有完整的数据块可用时,为什么CryptoStream.Read()会阻塞等待数据呢?
P.S。我已经确认发送一个额外的块允许读者读取第一个块。这只是一个错误还是设计?
答案 0 :(得分:0)
您是否在发送方的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);
}
}