C#插座和SSL流
在处理套接字时,我不清楚什么是“最好”使用的。套接字对象提供发送/接收方法(和异步等效方法),但也允许创建网络流。我使用Socket.Send获得乐趣的唯一方法是将调用包装在一个块中,例如:C#插座和SSL流,c#,sockets,ssl,C#,Sockets,Ssl,在处理套接字时,我不清楚什么是“最好”使用的。套接字对象提供发送/接收方法(和异步等效方法),但也允许创建网络流。我使用Socket.Send获得乐趣的唯一方法是将调用包装在一个块中,例如: using (Stream stream = new NetworkStream(socket)) { socket.Send(...); stream.Flush(); } 使用SslStream时,如果您在底层套接字上发送消息,它会通过SSL发送吗?我应该只使用Stream.Write(…)
using (Stream stream = new NetworkStream(socket)) {
socket.Send(...);
stream.Flush();
}
使用SslStream时,如果您在底层套接字上发送消息,它会通过SSL发送吗?我应该只使用Stream.Write(…)而不是socket方法吗
谢谢。经验法则:
- 如果未使用NetworkStream,请使用Socket.Send/Socket.Receive方法
- 如果您使用的是NetworkStream(正在包装套接字),请使用NetworkStream.Read/Write方法,但不要调用套接字方法
- 如果要在SslStream中包装NetworkStream,请在调用AuthenticateTasClient/Server之前使用NetworkStream.Read/Write方法,在调用AuthenticateTasClient/Server之后使用SslStream.Read/Write方法
(在某些情况下,可以忽略这些规则,但是您需要非常小心,准确地知道套接字、NetworkStream和SslStream在引擎盖下做什么。如果您总是使用最外层的包装,您就安全了。)谢谢。如果我关闭任意一端的SslStream,是否可以在同一个套接字上打开一个新套接字?@QmunkE:据我所知,不可以。创建NetworkStream或SslStream后,您将使用它直到连接关闭。