gpt4 book ai didi

C# 套接字和 SslStreams

转载 作者:太空狗 更新时间:2023-10-30 00:03:56 32 4
gpt4 key购买 nike

我对处理套接字时“最好”使用什么感到困惑。 Socket 对象提供 Send/Receive 方法(和异步等效方法),但也允许创建 NetworkStream。我对使用 Socket.Send 感到高兴的唯一方法是将调用包装在一个 block 中,例如:


using (Stream stream = new NetworkStream(socket)) {
socket.Send(...);
stream.Flush();
}

使用 SslStream 时,如果您在底层套接字上发送消息,它会通过 SSL 发送吗?我应该只使用 Stream.Write(...) 而不是套接字方法吗?

谢谢。

最佳答案

经验法则:

  • 如果您不使用 NetworkStream,请使用 Socket.Send/Socket.Receive 方法。
  • 如果您使用的是 NetworkStream(包装 Socket),请使用 NetworkStream.Read/Write 方法但不要调用 Socket 方法。
  • 如果您将 NetworkStream 包装在 SslStream 中,请在调用 AuthenticateAsClient/Server 之前使用 NetworkStream.Read/Write 方法,然后使用 SslStream.Read/Write 方法。

在 AuthenticateAsClient/Server 之后,您的连接将受到 SSL 保护。然后不要调用 Socket 或 NetworkStream 方法:这会破坏 SslStream。

(在某些情况下可以忽略这些规则,但是你需要非常小心并准确了解 Socket、NetworkStream 和 SslStream 在底层做了什么。如果你总是使用最外层的包装器,你就安全了边。)

关于C# 套接字和 SslStreams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3725531/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com