.net – NetworkStream和Socket类有什么区别?

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

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

所以我的问题是:在Socket类上使用NetworkStream类是否有任何不利之处.任何陷阱或任何需要注意的事项?

最佳答案 如果您被迫使用诸如套接字和管道之类的低级选项,并且您想要从这些数据源中提取流数据的抽象,则
Stream类是完美的,因为它为该模型提供了抽象.

如果你对Stream实例进行编码,那么你可以有任何实现Stream的东西,而不用担心底层传输.

在使用NetworkStream和Socket时,NetworkStream只包装一个Socket实例并将对pull模型(Stream)的调用应用于Socket.

点赞