NetworkStream
'un avantajı, öncelikle bir Stream
olmasıdır. Socket
'un dezavantajı, Stream
gibi soyut I/O kaynaklarından okuyan ve yazan ortak kodun bir Socket
işleyememesidir.
bir NetworkStream
ana kullanım durumu size okur ya da Stream
yazar başka bir yerde bazı koduna sahip olması ve size Socket
ile kullanmak isterdim. Bu durumda olup olmadığını ve daha sonra NetworkStream
'un büyük bir yardım olacağını biliyorsunuzdur! Örneğin, bir iletişim kitaplığınız vardı ve dosyalardan, adlandırılmış yöneltmelerden ve TCP/IP'den seri hale getirme mesajlarını desteklediniz. G/Ç sınıfı için ideal seçim Stream
olacaktır. Ardından seri hale getirme yöntemleriniz FileStream
, PipeStream
veya NetworkStream
kabul edebilir. Hatta bir MemoryStream
kabul eder. İşte bu akışın ne tür bilmeden soyutlama biz akışı oluşturduktan sonra, bir yöntem onunla etkileşime nedeniyle faydadır. Bu anlamda
, bir
NetworkStream
adaptör tasarım deseni kullanır.
Socket
API'sini
Stream
API'sine uyarlar, böylece
Stream
beklediğiniz istemciler bunu kullanabilir.
Son olarak, NetworkStream
, Socket
için Stream
bağdaştırıcısıysa, hangisini kullanmalıyız? 'a bir Stream
gerekiyorsa, NetworkStream
tek seçeneğinizdir. Bir Stream
'a ihtiyacınız yoksa, hangisinin daha rahat olduğunu API ile kullanabilirsiniz. Zaten Socket
kullanıyorsanız, NetworkStream
'a geçmek için herhangi bir neden yoktur.
Sadece buna ek olarak NetworkStream'in çok daha iyi uyumsuz desteğe sahip olduğunu ekleyebilir miyim –
@LukeMcGregor Bu doğru değil. "NetworkStream", Görev tabanlı async desteğini doğrudan uygulamıyor, bunun yerine, "Yerel" görev tabanlı async ("TaskFactory.FromAsync" işlevini kullanıyor) olarak ideal olan Stream'in kendi APM-Görev işlevine dayanıyor '). Ayrıca, 'BeginRead' /' BeginWrite' (APM) metotları, basitçe, (karışık olarak adlandırılan, Görev-olmayan) Socket gibi yüksek performanslı olmayan 'Socket.BeginReceive' /' Socket.BeginSend'ı da sarmaktadır. SendAsync' ve 'Socket.ReceiveAsync' yöntemleri. – Dai