2009-03-26 33 views
40

No veo mucho uso de TCPClient, sin embargo, hay un montón de Socket? ¿Cuál es la principal diferencia entre ellos y cuándo usarías cada uno?TCPClient vs Socket en C#

Entiendo que .NET Socket está escrito encima de WINSOCK, y TCPClient es un contenedor sobre la clase Socket. Por lo tanto, TCPClient está muy arriba en la cadena, y posiblemente ineficiente. Corrígeme si estoy equivocado.

Respuesta

31

El uso de TcpClient y TcpListener solo significa unas pocas líneas de código menos. Como dices, es solo una envoltura sobre la clase Socket por lo que no hay diferencia de rendimiento entre ellos, es puramente una elección de estilo.

+2

'estilo' es una gran palabra para 'sentido común' aquí. Si puede usar un prefabricado, por supuesto, hágalo :) – xtofl

+6

La nota aquí parece contradecir esto. http://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx "Si está escribiendo una aplicación relativamente simple y _no requiere un rendimiento máximo_, considere utilizando TcpClient " – Jon

+2

No hay contradicción. La suposición general sobre un nivel superior de abstracción es que es menos flexible con respecto a la funcionalidad subyacente. Por lo tanto, si necesita hacer algo que no se ajusta al modelo de decir, 'TcpClient', podría terminar torciendo y doblando su API y perderá en legibilidad y rendimiento en el proceso. Si lo está utilizando para lo que está diseñado, sin embargo, no hay una razón inherente para creer que tendrá un rendimiento inferior al de una API más explícita, pero obtendrá una mayor legibilidad. – tne

9

Además, puede acceder al zócalo directamente desde el objeto TCPClient, está bajo la propiedad Client - por lo que no hay diferencia de rendimiento.

Cuestiones relacionadas