簡體   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