В чем преимущество использования TcpClient и TcpServer над Socket

Два компьютера должны обмениваться данными через TCP/IP для синхронизации определенного потока процессов. В чем преимущество использования классов-оболочек TcpClient и TcpServer по сравнению с объектом Socket?

Я запрограммировал его с помощью первого, но мне он почему-то кажется сложным, и его можно было бы гораздо проще решить, используя последний. Любой хороший совет для меня?


person Mong Zhu    schedule 06.06.2016    source источник
comment
stackoverflow.com/q/685995/5311735   -  person Evk    schedule 06.06.2016
comment
@Evk Я должен был искать усерднее :)   -  person Mong Zhu    schedule 06.06.2016
comment
TcpClient и TcpServer наследуют класс сокета, и все три идентичны, за исключением различий в конструкторах. Сокет — это клиент в TcpClient и TcpServer. TcpClient и TcpSocket являются оболочками для класса сокетов и скрывают множество свойств. Вот почему вам часто нужно использовать клиент.   -  person jdweng    schedule 06.06.2016


Ответы (1)


Идея состоит в том, что с помощью классов-оболочек большая часть кода, который вам может понадобиться, уже написана за вас.

Преимущества использования обертки должны быть:

  • Проверка уже сделана
  • Меньше кода для написания
  • Уже тщательно протестировано
  • Повторное использование кода приветствуется там, где это имеет смысл.

Преимущества прокатки самостоятельно:

  • Вы получаете именно то, что хотите
  • Вы можете создать свой собственный синтаксис

Недостатки самостоятельного проката:

  • Вы должны написать ВЕСЬ код, включая тесты
  • Если вы похожи на меня, вы, вероятно, не так осведомлены, как специалист, написавший обертку
  • В результате вполне вероятно, что полученный код может быть менее эффективным, чем код в оболочке.

Решение всегда за вами. В конце концов, вы могли бы переписать весь фреймворк, если бы захотели, но зачем вам это?

Вам нужно посмотреть, что вам предоставляет обертка, и решить для себя, обеспечивает ли она то, что вам нужно. Если это так, то я бы сказал использовать его. Если он не соответствует вашим требованиям, либо напишите свой собственный, либо расширьте оболочку, чтобы она делала то, что вы хотите.

Надеюсь, это поможет.

person oldcoder    schedule 06.06.2016
comment
Я не хочу переписывать классы. :) альтернативой использованию классов-оболочек TcpClient и TcpServer является использование Socket без написания собственного. Они имеют почти одинаковые функциональные возможности в отношении подключения и отправки и получения данных. У меня такое ощущение, что класса Socket вполне достаточно для реализации протоколов двунаправленной связи - person Mong Zhu; 06.06.2016
comment
Как я уже сказал в своем посте, вы должны принять обоснованное решение. Если сокет делает то, что вам нужно, используйте его. Если это не соответствует вашим потребностям, вам нужно либо использовать оболочку, либо написать собственный код для обеспечения дополнительной функциональности. К сожалению, никто, кроме вас, не может определить, будут ли сокеты сами по себе делать то, что вы хотите... - person oldcoder; 06.06.2016
comment
Хороший ответ, может быть, не слишком технический, но подход ясен и разумен. Я голосую за это! - person X-HuMan; 06.06.2016