2013-03-07 2 views
1

enter image description here enter image description hereIdTCPServer врезается

Я использую Инди TCP сервер/клиент, и все отлично работает (исправлено несколько ошибок), но есть одна ошибка, что давало мне покоя.

Когда я замораживаю все потоки &, тогда убейте процесс клиента tcp, и сервер продолжает выходить из строя в tcpserver.

Есть ли способ обработать эту ошибку в Delphi 6 и другие ошибки сокета и предотвратить сбой сервера (я использую delphi 6/windows 8 64-bit (возможно, не нужен, но я никогда не тестировал его на своей победе 7 так что ...)/indy 9/Indy TCP Server & Клиент)?

+0

Какие «ошибки» вы исправили в 'TIdTCPClient' /' TIdTCPServer'? –

+0

только одна ошибка связана с этим (я думаю), я забыл называть TThreadList.UnlockList, и это заставило клиентов по-прежнему подключаться к серверу, но сервер никогда не добавлял их в список тем. – user0

ответ

4

Ваш сервер не сбой. EIdSocketError - совершенно нормальное исключение для TIdTCPServer, чтобы встретиться, когда клиентское соединение закрыто/потеряно. Это нормальное поведение. TIdTCPserver будет обрабатывать его внутренне для вас и закрыть сокет, если исключение выйдет на сервер (что вы должны разрешить ему делать - если вы его поймаете сами, переподнимите его после того, как вы закончите с ним). Единственная причина, по которой вы видите исключение, - это то, что отладчик сообщает об этом до того, как ваше приложение увидит это. Просто нажмите F9, чтобы позволить отладчику передать его в приложение для нормальной обработки или настроить отладчик для игнорирования исключений Indy EIdException.

+0

Извините, если я вводил в заблуждение, я имел в виду, что когда я нажимаю F9, он снова и снова поднимает одно и то же исключение. – user0

+1

Вы по-прежнему пытаетесь записать соединение после исключения ?. Лучше скриншотов будет соответствующий код в вопросе. Знаете ли вы, какая строка вашего кода вызывает исключение, если таковое имеется? – jachguate

+0

'ledata: = AThread.Connection.ReadLn ('', 10);' 'Client: = PClient (AThread.Data); <- исключение возникает здесь. ' – user0

0

И, пожалуйста, убедитесь, что вы используете более новую версию Indy, чем установленную в D7 (сначала вам нужно удалить старую версию). Существуют сбои с резьбовыми ошибками < 9.0.18

+0

Теперь я использую чистый Winsock, и я планирую никогда не использовать Indy снова. Так это необязательно. – user0

Смежные вопросы