2009-03-26 2 views
40

Я не вижу большого использования TCPClient, но есть много Socket? В чем основное различие между ними и когда вы будете использовать их?TCPClient vs Socket in C#

Я понимаю, что .NET Socket написан поверх WINSOCK, а TCPClient - это обертка над классом Socket. Таким образом, TCPClient - путь вверх по цепи и, возможно, неэффективен. Поправьте меня, если я ошибаюсь.

ответ

31

Использование TcpClient и TcpListener просто означает несколько меньших строк кода. Как вы говорите, это всего лишь оболочка над классом Socket, поэтому между ними нет разницы в производительности, это просто выбор стиля.

+2

«стиль» - большое слово для «здравого смысла» здесь. Если вы можете использовать сборник, непременно сделайте это :) – xtofl

+6

Примечание здесь, похоже, противоречит этому. http://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx «Если вы пишете относительно простое приложение и не требуете максимальной производительности, рассмотрите используя TcpClient " – Jon

+2

Нет противоречия. Общее предположение о более высоком уровне абстракции состоит в том, что оно менее гибко применительно к базовым функциям. Следовательно, если вам нужно сделать что-то, что не соответствует модели, скажем, 'TcpClient', вы можете закончить скручивание и изгиб своего API и потерять удобочитаемость и производительность в этом процессе. Если вы используете его для того, что он предназначен для выполнения, однако нет никаких оснований полагать, что он будет работать менее эффективно, чем более явный API, но вы получите читаемость. – tne

9

Кроме того, вы можете получить доступ к сокете непосредственно с объекта TCPClient, это находится под свойством Client - поэтому нет разницы в производительности.