NetworkStream.Write与Socket.Send
我有一个ac#应用程序,我使用自定义FTP库。 现在我使用Socket.Send发送数据,但我想知道用套接字启动NetworkStream是否更好,而是使用NetworkStream.Write。
使用一个优于另一个是否有任何优势?
NetworkStream
的优势主要来自于它是一个Stream
。 Socket
的缺点是从抽象I / O源(如Stream
读取和写入的公共代码无法处理Socket
。
NetworkStream
的主要用例是您在其他地方有一些从Stream
读取或写入的代码,并且您希望可以将它与Socket
一起使用。 您会知道是否处于这种情况,然后NetworkStream
将是一个很大的帮助!
比如说你有一个通信库,你支持从文件,命名管道和TCP / IP序列化消息。 I / O类的理想选择是Stream
。 然后,您的序列化方法可以接受FileStream
, PipeStream
或NetworkStream
。 它甚至会接受一个MemoryStream
。 这是抽象的好处,因为在我们创建了流之后,一个方法可以与它进行交互 ,而不知道它是什么类型的流。
从这个意义上说, NetworkStream
使用适配器设计模式。 它使Socket
API适应Stream
API,以便期望Stream
客户端可以使用它。
最后,问题是,如果NetworkStream
是Socket
的Stream
适配器,我们应该使用哪一个? 好吧,如果您需要 Stream
,那么NetworkStream
是您唯一的选择。 如果您不需要Stream
,那么您可以使用最适合的API。 如果您已经成功使用Socket
,则没有迫切需要切换到NetworkStream
。
您可以将NetworkStream
创建分开,并像使用抽象Stream
一样使用它 – 这样您就可以更改传输或只是创建Stream
存根进行测试。
作为方法本身的问题 – NetworkStream.Write
里面有唯一的操作(除了状态检查) streamSocket.Send(buffer, offset, size, SocketFlags.None);
– 所以它与在socket上调用它大致相同。