Ошибка 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объект canWrite а также canRead свойства всегдаfalse".

Очевидно, я гуглил и искал во многих форумах, но я всегда находил тот же самый код, который не работает для меня.

Как я могу исправить это исключение?

1 ответ

Как только вы создаете SslStream (на вершине TcpClient) вы должны рукопожатие соединения ssl. Для этого вы будете использовать некоторые методы, доступные в SslStream тип:

  • AuthenticateAsClient (несколько перегрузок)
  • AuthenticateAsServer (несколько перегрузок)

(или они асинхронные варианты BeginAuthenticateAs...)

Без использования этих методов рукопожатия SslStream на самом деле не настроен, и вы не сможете читать или писать из / в сетевой поток.

Какие методы использовать (AuthenticateAsClient или же AuthenticateAsServer) зависит от вашей реализации и желаемого использования потока SSL.

Другие вопросы по тегам