错误:流不可写

本文关键字:错误 | 更新日期: 2023-09-27 18:17:50

我遇到一个奇怪的错误。下面的代码总是抛出异常(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 '。

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

如何修复这个异常?

错误:流不可写

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

  • AuthenticateAsClient (几个过载)
  • AuthenticateAsServer (几个过载)

(或它们的异步变体BeginAuthenticateAs...)

如果不使用这个握手方法,SslStream并没有真正设置好,你将无法从网络流中读写。

使用哪种方法(AuthenticateAsClientAuthenticateAsServer)是特定于您的实现和SSL流的期望用法。