2012-05-09 19 views
8

TCP/IP üzerinden iletişim kuran bir istemci-sunucu uygulamasına sahibim.
TCP üzerinden ascnyronous iletişim için System.Net.Sockets.Socket tipi nesne kullanıyorum. Temel olarak, bağlantı gönderim/alma verilerini açıp bağlantıyı kapatıyorum. Ve benim uygulamam Soket tipi nesnelere dayanıyor.
Şimdi bir şey yapmak için üçüncü taraf bir dll kullanmam gerekiyor. Bu dll, System.IO.Stream türünde bir nesne bekler. Bu yüzden benim Soket nesnesinin Stream nesnesini almam gerekiyor.
Bunu nasıl yapabilirim?
Teşekkür ederiz.bir soket nesnesinin akışını alın C#

+3

dikkatli olun - Bir soket örneği ÅŸan - bir dere örneği değil! – weismat

cevap

15

Oldukça basit. NetworkStream sınıfının yapıcı bir soket sarmak için kabul eder:

http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.aspx

// NOTE: This demonstrates disposal of the stream when you are 
// done with it- you may not want that behavior. 
using (var myStream = new NetworkStream(mySocket)) { 
    my3rdPartyObject.Foo(myStream); 
} 
+1

bu harika :) bu şekilde düşünemedim. Teşekkürler. – Fer

+2

Sadece bu akış kullanıcısı 'myStream.Close()' olarak adlandırmak isteyecekse, NetworkStream'i soket sahipliğine sahip olmanızı öneririm: 'new NetworkStream (mySocket, true)'. Aksi halde, akışı kapattıktan sonra bir okuma işleminde bloke olan iş parçacığının hala neden engellendiğini merak ediyorsunuz. –

İlgili konular