2010-12-28 1 views
1

В resolution comments для сообщения об ошибке 12266 («Ошибка сокета подключения, вызывает утечку ресурсов»), Роберт Ehteshamzadeh написалЯвляется ли Delphi TClientSocket (все еще) устаревшим?

TClientSocket устарела. Этот отчет остается открытым для разрешения предлагаемых обходных решений.

Это было для Delphi 6. В более поздних версиях, TClientSocket и TServerSocket не были установлены в палитре инструментов по умолчанию, но инструкция установка была provided.

С этого момента изменился статус, так что TClientSocket (и TServerSocket тоже) теперь являются членами первого класса в Delphi VCL снова? Я хотел бы использовать TClientSocket (как другую библиотеку TCP/IP после Indy и Synapse) в некоторых проектах и ​​не смог найти официальную информацию о статусе в Embarcadero DocWiki.

(Официальным индексом «устаревших» классов/методов было бы полезно).

+0

Что случилось с Инди и Синапсом? – Harriv

+0

Indy и Synapse уже поддерживаются как «подключаемые» коммуникационные адаптеры в библиотеках, которые я написал. Возможно, если TClientSocket перестает быть устаревшим и не имеет очевидных ошибок/проблем, я также добавлю поддержку для них, только чтобы предоставить больше вариантов. – mjn

ответ

6

Чтобы ответить на ваш вопрос, а именно:

Да, TClientSocket и TServerSocket по-прежнему не рекомендуется, и я не могу себе представить, что эта ситуация изменится.

1

Ну, это зависит от того, что вы называете устаревшим. Если «больше не включено ни в одну из исходных папок» считается устаревшим, то да, оно все еще не рекомендуется (D2009).

Update

Источником TClientSocket и TServerSocket на самом деле присутствует. @mjn и @ Юджин указал мне на это. Просто идет показать еще раз, что не найти что-то с поиском Windows не означает, что его нет. Он может просто скрываться в файле с расширением, которое Windows считает «не подлежащим поиску», потому что фильтр поиска не был определен для него ... (Думал, что он был настроен на .pas-файлы, но оказывается, что это было на другой моей машине).

Но я думаю, что не умаляет от него до сих пор осуждается ...

+0

Это странно - для Delphi 2009 я нашел 'TClientSocket = class (TCustomSocket)' и 'TServerSocket = class (TCustomServerSocket)' в C: \ Program Files \ CodeGear \ RAD Studio \ 6.0 \ source \ Win32 \ vcl \ ScktComp .pas – mjn

+0

В Delphi 2010 источник доступен, как и в Delphi 2009. –

+0

@mjn, @Eugene: Вы совершенно правы. Когда вы указали мне на это, я обнаружил, что исходный блок просто отлично.Оказывается, я не зарегистрировал ни одного фильтра поиска для файлов pas на этом компьютере. –

5

TClientSocket и TServerSocket использовать неэффективный дизайн, основанный на сообщениях Windows. Эта схема была введена в Windows 3.11 (или это произошло в 3.1?), Когда не было истинной многозадачности, и многопоточная обработка сокетов была невозможна. Утечка произошла из-за более мощных и высокопроизводительных решений, появившихся на рынке компонентов (а именно Indy, затем других библиотек). Нет смысла возвращать старую технологию, хотя компоненты все еще отправлены. Более того, я бы предложил Embarcadero включить некоторую реализацию сокета на основе IOCP-сервера, однако, я думаю, серверные сокеты сейчас не входят в сферу интересов Embarcadero.