Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 20:12   #1
IceMage
Пользователь
 
Регистрация: 12.07.2008
Сообщений: 15
По умолчанию Возможности TServerSocket/TClientSocket

Использую пару TServerSocket/TClientSocket. Озаботился надежностью передачи. Посоветовали TIdTCP компоненты.

И все же хочется разобраться во всём самому, а не использовать готовое. Для начала, какие возможности предоставляет пара TServerSocket/TClientSocket (можно с TIdTCP для наглядности сравнить)? По какому протоколу работает?
IceMage вне форума Ответить с цитированием
Старый 19.01.2011, 02:12   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
TServerSocket/TClientSocket
как явствует из названия, суть обертка над сокетами

Цитата:
TIdTCP
опять же, как явствует из названия, суть обертка над протоколом более высокого уровня TCP (т.е. фактически является "развитием" первых)

Если нужны подробности по методам, то открою секреть есть такая вещь, как справка и клавиша F1.

Последний раз редактировалось p51x; 19.01.2011 в 02:16.
p51x вне форума Ответить с цитированием
Старый 19.01.2011, 03:08   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
как явствует из названия, суть обертка над сокетами
конкретно над TCP сокетами.
Цитата:
опять же, как явствует из названия, суть обертка над протоколом более высокого уровня TCP (т.е. фактически является "развитием" первых)
является оберткой над TCP сокетами, ИнДи самостоятелен.

UDP сокет всетаки немного иное.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.01.2011, 11:37   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> Озаботился надежностью передачи. Посоветовали TIdTCP компоненты

Советчиков таких - в топку.
Надежность передачи ни от того ни отдругого комплекта компонентов никак не зависит.
mss вне форума Ответить с цитированием
Старый 19.01.2011, 11:40   #5
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

сами Вы в топу.... TCP хотя бы будешь знать дошло или нет... на уровне протокола это реализовано... Учите мать часть
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 19.01.2011, 11:52   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> TCP хотя бы будешь знать дошло или нет... на уровне протокола это реализовано

Угу. На уровне ТОГО ЖЕ САМОГО (!!!!!) протокола TCP, который использует и TClient/ServerSocket.

Так что учить матчасть полезней будет именно тебе, чтобы впредь бредятину не нести про "пробуй INDY - в передаче по TCP он надежней чем scktcomp"
mss вне форума Ответить с цитированием
Старый 19.01.2011, 13:52   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Подводя итог, обе реализации работают поверх TCP, т.е. обеспечивают примерно одинаковую функциональность и абсолютно одинаковую 100% надёжность передачи данных. Различие в деталях, в частности TServerSocket/TClientSocket - синхронные, Инди, честно говоря, не знаю.

Вобще, смысл использовать что-то более сложное, чем socket(), connect() и send()/recv() для TCP сокетов (и bind(), recvfrom() и sendto() для UDP сокетов) для меня весьма туманен. Если не хочется зависать в синхронных сокетах, а асинхронные поднимать лень, всегда есть select().

Инди хорош (и то с оговорками) только для протоколов типа HTTP, SMTP, SNTP, которые самому поднимать лень, а сделать надо. Для чего хорош TServerSocket/TClientSocket или TIdTCP я вобще затрудняюсь сказать. Имхо, гораздо проще разобраться с connect() и send()/receive(), чем угадывать, как именно хотели разработчики компонент предоставить ту же самую функциональность.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 19.01.2011, 15:19   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> TServerSocket/TClientSocket - синхронные, Инди, честно говоря, не знаю

TServerSocket/TClientSocket позволяет работать с транспортом и в синхронной и в асинхронной ипостасях.

Вот в Инди-то как раз искл-но синхронный транспортный механизм задействован. И тому простое объяснение - индейцы лепили его с замашкой на "кроссплатформенность" применения и масштабируемость. В результате получился глюкавый не слишком поворотливый во всех смыслах монстр, который никто в здравом уме не порекомендует использовать в "боевых" условиях. Хотя, конечно же, к надежности собственно TCP-транспорта это отношения не имеет)
mss вне форума Ответить с цитированием
Старый 19.01.2011, 15:31   #9
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

mss мы с вами на брудершафт не пили... так что давайте придерживаться правил форума.

Во вторых тестил соединение на TServerSocket/TClientSocket
и на idTCPServer/idTCPClient и хочу заметить что таком соединении

Цитата:
Ответ от 82.*: число байт=32 время=7мс TTL=122
Ответ от 82.*: число байт=32 время=5мс TTL=122
Ответ от 82.*: число байт=32 время=5мс TTL=122
Ответ от 82.*: число байт=32 время=15мс TTL=122
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 82.*: число байт=32 время=6мс TTL=122
Ответ от 82.*: число байт=32 время=7мс TTL=122
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 82.*: число байт=32 время=9мс TTL=122
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Ответ от 82.*: число байт=32 время=9мс TTL=122
Ответ от 82.*: число байт=32 время=10мс TTL=122
Ответ от 82.*: число байт=32 время=5мс TTL=122
Превышен интервал ожидания для запроса.
Ответ от 82.*: число байт=32 время=75мс TTL=122
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
100% пакетов от idTCPClient приходит к idTCPServer.... а на
TServerSocket/TClientSocket это цифра составляет лиш 90%.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 19.01.2011, 15:36   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> TServerSocket/TClientSocket позволяет работать с транспортом и в синхронной и в асинхронной ипостасях.

Спасибо за дополнение. Я вобще в ScktComp.pas последний раз лет 10 назад заглянул, ужаснулся и больше не открывал.

Вобще, имхо, общая беда обоих реализаций — это то, что они пытаюся скрыть свою синхронность/асинхронность от разработчика, запуская внутри потоки, вызывая Synchronize() и прочие ужасы, только бы VCL не падал и сокеты не зависали. Т.е. расчитаны на домохозяек, которых обучили класть компоненты на формы, а думать в терминах мультипоточности обучить всё-равно невозможно.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 19.01.2011 в 15:38.
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TClientSocket и TServerSocket _-Re@l-_ Работа с сетью в Delphi 2 29.11.2010 16:22
TServerSocket и TClientSocket grafgrial Общие вопросы Delphi 3 25.08.2010 15:15
TServerSocket, TClientSocket prod87 Работа с сетью в Delphi 7 26.10.2009 22:38
проблема с TServerSocket и с TClientSocket DOLBY Работа с сетью в Delphi 56 14.01.2008 16:12