1

我在两端的 TcpClient 的 NetWorkStream 周围设置了一个带有 CryptoStream 的客户端/服务器。当我直接从 NetworkStream 读取数据时,双向通信效果很好,但使用 CryptoStream 我无法读取单个可用数据块。我正在关闭 CryptoStream 以导致从服务器调用 FlushLastBlock 并且确实在客户端显示了唯一的 16 字节块(AES 加密)。那么,当有完整的数据块可用时,为什么 CryptoStream.Read() 会阻塞等待数据呢?

PS我已经验证发送一个额外的块允许读者阅读第一个块。这只是一个错误还是设计使然?

4

1 回答 1

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);
    }
}
于 2013-12-19T01:31:32.263 回答