Вопрос

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

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

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

Как я могу укорениться?

(Кроме того, у кого -нибудь есть демонстрация, которая использует Try ... за исключением, чем STACEHR, чем попробуйте ... наконец, как в демонстрации Indy?)

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top