2012-05-09 6 views
8

Ho un'applicazione client-server che comunica su TCP/IP.
Uso l'oggetto tipo System.Net.Sockets.Socket per la comunicazione ascnonica su TCP. In linea di principio, apro la connessione per inviare/ricevere dati e chiudere la connessione. E la mia implementazione è basata su oggetti di tipo Socket.
Ora ho bisogno di usare una DLL di terze parti per fare qualcosa. Questa dll si aspetta un oggetto di tipo System.IO.Stream. Così ho bisogno di ottenere flusso oggetto della mia Socket oggetto.
Come posso farlo?
Grazie.ottenere flusso di un oggetto socket in C#

+3

Fare attenzione durante la miscelazione Socket e Stream - un'istanza socket è threadsafe - un'istanza di flusso non è! – weismat

risposta

15

Abbastanza semplice, in realtà. Il costruttore della classe NetworkStream accetta una presa di corrente per avvolgere:

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

questo è fantastico :) non potrei pensare in questo modo. Grazie. – Fer

+2

Nel caso in cui l'utente di quel flusso voglia chiamare 'myStream.Close()', consiglio di costruire NetworkStream con la proprietà del socket: 'new NetworkStream (mySocket, true)'. Altrimenti si finisce per chiedersi perché il thread che blocca in un'operazione di lettura sia ancora bloccato dopo aver chiuso il flusso. –

Problemi correlati