Ошибка 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.