2012-05-09 23 views
8

Mam aplikację klient-serwer, która komunikuje się przez TCP/IP.
Używam obiektu typu System.Net.Sockets.Socket do ascnyronicznej komunikacji przez TCP. Zasadniczo otwieram połączenia wysyłam/odbieram dane i zamykam połączenie. A moja implementacja opiera się na obiektach typu Socket.
Teraz potrzebuję użyć dll innej firmy by coś zrobić. Ta biblioteka DLL oczekuje obiektu typu System.IO.Stream. Muszę więc uzyskać obiekt Stream obiektu Socket.
Jak mogę to zrobić?
Dziękuję.Otrzymuję strumień obiektu gniazda w C#

+3

Należy zachować ostrożność podczas mieszania gnieździe i Stream - instancja gniazdo jest threadsafe - instancja strumień nie jest! – weismat

Odpowiedz

15

Bardzo proste naprawdę. Konstruktor klasy NetworkStream akceptuje gniazdo zawinąć:

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

to jest niesamowite :) nie mogłem myśleć w ten sposób. dzięki. – Fer

+2

Na wypadek gdyby użytkownik tego strumienia chciał wywołać 'myStream.Close()', polecam skonstruować NetworkStream z prawem własności do gniazda: 'new NetworkStream (mySocket, true)'. W przeciwnym razie zastanawiasz się, dlaczego wątek blokujący operację odczytu jest nadal blokowany po zamknięciu strumienia. –

Powiązane problemy