有一个接口IStream来抽象NetworkStream和SslStream。使用NetworkStream一切都很好,而SslStream在Read方法上有问题。这就是我建立Ssl流的方式:
class SecureStream : SslStream, IStream
{
TcpClient _tcpClient;
public SecureStream(TcpClient tcpClient) : base(tcpClient.GetStream()) {
_tcpClient = tcpClient;
var serverCertificate = new X509Certificate(@"C:\Cert.cer");
AuthenticateAsServer(serverCertificate);
ReadTimeout = -1;
this.InnerStream.ReadTimeout = -1;
_tcpClient.Client.ReceiveTimeout = -1;
}
...
}
成功读取后,某些部分数据(http标头)必须在Read方法上等待几秒钟,但Read方法立即返回0.Ssl连接保持活动状态,我可以将响应写回其他线程。什么原因可能是Read方法没有等待数据出现在流中?
答案 0 :(得分:0)
事实证明,对于构造函数内部负责的SSL流建立这样的行为(感谢Luaan)。 Encapsulated SslStream版本按预期工作。