Delphi TClientSocket (все еще) устарел?
В комментариях к резолюции об ошибке 12266 ("Ошибка подключения к сокету приводит к утечке ресурсов") Роберт Эхтешамзаде писал
TClientSocket устарел. Этот отчет оставлен открытым, чтобы предложить предлагаемые обходные пути.
Это было для Delphi 6. В более поздних версиях TClientSocket и TServerSocket не были установлены в палитре инструментов по умолчанию, но была предоставлена инструкция по установке.
Изменился ли этот статус с тех пор, так что TClientSocket (и TServerSocket тоже) теперь снова являются первоклассными членами в Delphi VCL? Я хотел бы использовать TClientSocket (как другую библиотеку TCP/IP после Indy и Synapse) в некоторых проектах и не смог найти официальную информацию о состоянии в Embarcadero DocWiki.
(Официальный указатель "устаревших" классов / методов будет полезен).
3 ответа
Чтобы ответить на ваш вопрос конкретно:
Да, TClientSocket и TServerSocket по-прежнему устарели, и я не могу представить, что эта ситуация изменится.
TClientSocket и TServerSocket используют неэффективный дизайн, основанный на сообщениях Windows. Эта схема была введена в Windows 3.11 (или это произошло в 3.1?), Когда не было настоящей многозадачности, а обработка многопоточных сокетов была невозможна. Устаревание произошло из-за появления на рынке компонентов более мощных и высокопроизводительных решений (а именно Indy, а затем других библиотек). Нет смысла возвращать старую технологию к жизни, хотя компоненты все еще поставляются. Более того, я бы предложил, чтобы Embarcadero включил некоторую реализацию серверных сокетов на основе IOCP, однако, я думаю, серверные сокеты сейчас не входят в сферу интересов Embarcadero.
Ну, это зависит от того, что вы называете устаревшим. Если "больше не входит ни в одну из исходных папок" считается устаревшим, то да, он по-прежнему считается устаревшим (D2009).
Обновить
Источник для TClientSocket и TServerSocket фактически присутствует. @mjn и @ Евгений указали мне на это. Это еще раз показывает, что отсутствие поиска с помощью поиска Windows не означает, что его там нет. Он может просто скрываться в файле с расширением, которое Windows считает "невозможным для поиска", потому что для него не определен поисковый фильтр... (Хотя я и настроил его для файлов.pas, но оказалось, что на другой из моих машин).
Но я думаю, что это не умаляет все еще быть устаревшим...