2017-06-29 213 views
0

我寫了一個TCP庫,現在想要支持SSL。該庫將連接/斷開部分與數據流的處理分開。我可以插入一個流處理程序,它將傳輸和接收字節塊,但它無法訪問提供該數據的套接字。如何在不使用TcpSocket的情況下使用SSLStream

所有使用SslStream看起來非常像這樣的例子:

TcpClient client = new TcpClient(); 
Sslstream sslStream = new SslStream(client.GetStream(), true, ValidCerts); 

我想使用SslStream沒有TcpClient的供應流。

有反正我可以做到這一點嗎?

+0

究竟是什麼問題?把你擁有的任何流放到'SslStream'構造函數中而不是'client.GetStream'中。如果這不起作用 - 顯示代碼以及它不能正常工作(異常詳情)。 – Evk

+0

你對SSL/TLS有多瞭解?您應該仔細閱讀[RFC 5246](https://tools.ietf.org/html/rfc5246)瞭解網絡活動需要什麼。 –

+0

也許我在想這個太多了,但是我會認爲你需要2個流(egress,ingress),否則進入的字節會覆蓋出去的字節。 – Neil

回答

0

的例子可以重寫爲:

TcpClient client = new TcpClient(); 
Stream stream = client.GetStream(); 
... 
SslStream ssl = new SslStream(stream, true, ValidCerts); 

client.GetStream()呼叫剛內聯; SslStream只與Stream相互作用,而不與TcpClient相互作用。

+0

我不想使用TcpClient流,我想創建自己的Stream。 – Neil

+0

'TcpClient.GetStream()'返回一個'NetworkStream',但是你可以使用_any_'Stream'實現。 –

+0

如果我提供一個''MemoryStream'',它似乎不起作用。你認爲它應該? – Neil

相關問題