2009-11-16 13 views
5

.NET permite dos formas muy similares a "leer" de la red (suponiendo conexión TCP):TcpClient.GetStream() Read() vs. TcpClient.Client.Receive()

1. TcpClient.GetStream().Read() 
2. TcpClient.Client.Receive() 

Al observar en el código fuente de NetworkStream, parece que es un envoltorio adicional sobre el socket subyacente, que finalmente llama a los métodos Socket.

Pregunta: ¿Cuál es la ventaja de usar la variación "indirecta" de NetworkStream (n. ° 1), en lugar de utilizar el envoltorio directo proporcionado por la implementación de Socket?

Gracias, Boris.

Respuesta

10

Existe, de hecho, un beneficio bastante claro al utilizar la primera opción (TcpStream y no Socket). El beneficio es que la API de transmisión es más flexible cuando se necesitan diferentes implementaciones subyacentes para el mismo programa.

Por ejemplo, un código que a veces puede usar SSL y que a veces no lo usa, puede alternar entre SslStream y TcpStream sin cambios en el código de llamada. Esto es algo que es mucho más difícil de lograr usando solo Socket API.

1

Nada, en serio. Es solo que a veces es más conveniente usar un Stream.

-1

Para mí, una operación exitosa Socket.Receive con cero bytes recibidos le dice que la conexión está cerrada.