2012-05-09 27 views
8

Tengo una aplicación cliente-servidor que se comunica a través de TCP/IP.
Uso el objeto tipo System.Net.Sockets.Socket para la comunicación ascnyronous a través de TCP. Básicamente abro los datos de envío/recepción de conexión y cierro la conexión. Y mi implementación se basa en objetos tipo Socket.
Ahora necesito usar un dll de terceros para hacer algo. Este dll espera un objeto de tipo System.IO.Stream. Así que necesito obtener Stream objeto de mi Socket objeto.
¿Cómo puedo hacer eso?
Gracias.obtener la secuencia de un objeto socket en C#

+3

Tenga cuidado al mezclar zócalo y corriente - una instancia de socket es multi-hilo - una instancia de secuencia no es! – weismat

Respuesta

15

Bastante simple realmente. El constructor de la clase NetworkStream acepta un enchufe para envolver:

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

esto es increíble :) no pude pensar de esta manera. Gracias. – Fer

+2

En caso de que el usuario de esa transmisión quiera llamar a 'myStream.Close()', recomiendo construir NetworkStream con la propiedad del socket: 'new NetworkStream (mySocket, true)'. De lo contrario, terminará preguntándose por qué el hilo que bloquea en una operación de lectura todavía está bloqueado después de cerrar la secuencia. –

Cuestiones relacionadas