NetworkStream 和 Socket 类有什么区别?

uri*_*ium 5 .net sockets network-programming

我有一个项目,我可能想在其中抽象客户端和服务器之间的通信。我最初使用套接字和 TCP。然后我认为能够切换到进程间通信通道可能会很好。然后我查看了 System.IO.PipedStream 类,发现 PipeStream 和 Socket 类之间有很多重叠。但是当我查看它继承自 Object 的 Socket 类时。所以Socket和PipeStreams之间没有通用的接口或抽象类。

然后我想起了一些关于 NetworkStream 的事情。它显然包装了一个 Socket 类。但至少 NetworkStream 和 PipeStream 都继承自 Stream。这意味着我可以换掉我的实现。我想,我还没有尝试过这个。我一直在使用套接字。

所以我的问题是:在 Socket 类上使用 NetworkStream 类是否有任何缺点。有什么需要注意的问题或注意事项吗?

cas*_*One 2

如果您被迫使用低级选项(例如套接字和管道),并且需要从这些数据源提取流数据的抽象,那么 Stream是完美的,因为它为该模型提供了该抽象。

如果您针对 Stream 实例进行编码,那么您可以让任何东西实现 Stream,而不必担心底层传输。

关于使用 NetworkStream 与 Socket,NetworkStream 只是包装 Socket 实例并将对拉取模型(流)的调用应用于 Socket。