2009-09-02 23 views
1

使用SslStream似乎无法获得ReceiveAsync的好处,因为我将不得不通过SslStream进行读取,而SslStream仅支持Begin * End * async模型。Socket.ReceiveAsync和SslStream

是否可以直接使用SslStream直到认证完成,然后才直接访问套接字?这意味着我必须找出协商的安全级别,然后自己将正确的加密/解密应用于缓冲区。发送前加密,接收后解密。

这是可行的吗?

谢谢!

回答

1

SslStream为您提供隐私+服务器身份验证,并取决于您是否使用ClientCertificates以及客户端身份验证。您不能直接使用套接字,因为一旦建立了SSL会话,密钥交换就会将加密和其他算法绑定到会话,并且不可能在代码中复制它。

无论如何,SslStream.Begin/End方法为您提供所需的异步功能。为什么你需要回退到Socket.SendAsync/ReceiveAsync()?

+0

然后我们可以使用SocketAsyncArgs来提高套接字性能! – 2011-03-17 07:55:21

+1

不,你不能。意识到SSLStream正在封装流以提供身份验证和加密。它不包裹套接字。包装流让您可以灵活地使用自己的流实现。如果你真的想要更好的性能,请通过调用Socket.SendAsync()/ ReceiveAsync()来编写自己的Stream类来实现BeginSend/EndSend。或者,在http:// msconnect上打开一个错误,并要求他们在所有System.Net流上公开SendAsync()模式,这样可以解决您的问题。 – feroze 2011-03-17 18:24:05

+0

你的建议是一个好主意! – 2011-03-30 04:33:12