SslStream错误:Stream不可写

时间:2014-08-13 22:32:15

标签: c# ssl argumentexception sslstream

我面临一个奇怪的错误。以下代码总是抛出异常(System.ArgumentException" Stream was not writable"):

TcpClient socket = new TcpClient();
socket.Connect("serverIp", serverPort);
//wrap networkstream with ssl 
SslStream sslStream = new SslStream(socket.GetStream(),false); 

stream.ReadTimeout = 5000;
stream.WriteTimeout = 5000;

//following line throws System.ArgumentException "Stream was not writable"
var writer = new BinaryWriter(sslStream); 
writer.Write(abMessage, nStart, nLength);
writer.Flush();

' sslStream'对象canWritecanRead属性始终是' false'。

显然,我已经谷歌搜索,并在许多论坛搜索,但是,我总是发现相同的代码不适合我。

如何修复此异常?

1 个答案:

答案 0 :(得分:3)

创建SslStream(在TcpClient之上)后,您应该握手ssl连接。为此,您将使用SslStream类型中提供的一些方法:

  • AuthenticateAsClient (多次重载)
  • AuthenticateAsServer (多次重载)

(或他们的异步变体BeginAuthenticateAs...

如果不使用此握手方法,SslStream并未真正设置,您将无法读取或写入网络流。

使用哪种方法(AuthenticateAsClientAuthenticateAsServer)特定于您的实施和SSL流的所需用途。