Слишком много связей при разработке - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь (с большой помощью этого сообщества) собрать свое первое клиент-серверное приложение.

Я использую Indy 10 и Delphi Xe2, но подозреваю, что моя проблема не связана сте, но скорее с тем, как работают soockets (волшебники и черные искусства, если вы спросите меня).

Поскольку я часто бью контрольные точки исключений и перебираю свой код, прежде чем нажимать Alt + F2, чтобы остановиться, мои следующие запуски частонажмите исключение «уже подключен», и в конце концов я получаю «слишком много подключений».

Как мне привести это в порядок?

(кроме того, есть ли у кого-нибудь демонстрационная программа, использующая try ... кромеЧитай, чем пытаться ... наконец, как в демонстрациях Indy?)

1 Ответ

5 голосов
/ 11 января 2012

«уже подключено» происходит на стороне клиента при вызове Connect(), в то время как Connected() все еще возвращает true. Это обычно происходит, если вы отключаетесь и оставляете непрочитанные данные в IOHandler.InputBuffer. Попробуйте очистить InputBuffer перед повторным подключением. Это часто встречается, поэтому обновление Indy в ближайшем будущем может решить эту проблему.

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

...