2009-03-26 11 views
40

Non vedo molto l'uso di TCPClient, eppure c'è un sacco di Socket? Qual è la principale differenza tra loro e quando useresti ciascuno?TCPClient vs socket in C#

Comprendo che .NET Socket è scritto sopra WINSOCK e TCPClient è un wrapper su classe Socket. Pertanto, TCPClient è molto più lungo della catena e probabilmente inefficiente. Correggimi se sbaglio

risposta

31

L'utilizzo di TcpClient e TcpListener significa solo poche righe di codice. Come dici tu, è solo un wrapper sulla classe Socket quindi non c'è differenza di prestazioni tra di loro è puramente una scelta di stile.

+2

"stile" è una parola grossa per "senso comune" qui. Se è possibile utilizzare un prefabbricato, con tutti i mezzi, farlo :) – xtofl

+6

La nota qui sembra contraddire questo. http://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx "Se stai scrivendo un'applicazione relativamente semplice e _do non richiede prestazioni massime_, considera utilizzando TcpClient " – Jon

+2

Non c'è alcuna contraddizione. L'ipotesi generale su un livello più alto di astrazione è che è meno flessibile per quanto riguarda la funzionalità sottostante. Quindi, se devi fare qualcosa che non si adatta al modello di dire, 'TcpClient', potresti finire per torcere e piegare la sua API e perdere in leggibilità e prestazioni nel processo. Se lo stai utilizzando per quello che è stato progettato per fare, tuttavia non vi è alcun motivo intrinseco per credere che funzionerà meno bene di un'API più esplicita, ma guadagnerai leggibilità. – tne

9

Inoltre, è possibile accedere alla presa direttamente dall'oggetto TCPClient, è sotto la proprietà Client - quindi non c'è alcuna differenza di prestazioni.