繁体   English   中英

NetworkStream.Write 与 Socket.Send

[英]NetworkStream.Write vs. Socket.Send

我有一个 c# 应用程序,我使用自定义 FTP 库。 现在我使用 Socket.Send 发送数据,但我想知道用套接字启动 NetworkStream 并改用 NetworkStream.Write 是否会更好。

使用其中一个有什么优势吗?

NetworkStream的优势主要源于它是Stream Socket的缺点是从抽象 I/O 源(如Stream )读取和写入的通用代码无法处理Socket

NetworkStream的主要用例是您在其他地方有一些从Stream读取或写入的代码,并且您希望可以将它与Socket一起使用。 您会知道是否处于这种情况,然后NetworkStream将有很大帮助!

例如,假设您有一个通信库,并且您支持从文件、命名管道和 TCP/IP 序列化消息。 I/O class 的理想选择是Stream 然后您的序列化方法可以接受FileStreamPipeStreamNetworkStream 它甚至会接受MemoryStream 这是抽象的好处,因为在我们创建了 stream 之后,一个方法可以与它交互,而无需知道它是哪种 stream。

从这个意义上说, NetworkStream使用适配器设计模式。 它将Socket API 适配到Stream API 以便期望Stream的客户可以使用它。

所以最后的问题是,如果NetworkStreamSocketStream适配器,我们应该使用哪一个? 好吧,如果您需要Stream ,那么NetworkStream是您唯一的选择。 如果您不需要Stream ,那么您可以使用您最熟悉的 API 。 如果您已经成功使用了Socket ,则没有迫切的理由切换到NetworkStream

您可以单独创建NetworkStream并像使用抽象Stream一样使用它 - 这样您就可以更改传输或简单地创建Stream存根进行测试。

作为方法本身的问题 - NetworkStream.Write里面有唯一的操作(除了 state 检查) streamSocket.Send(buffer, offset, size, SocketFlags.None); - 所以它与在套接字上调用它几乎相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM