| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Range Check Error |
| Автор: Sokolll 27.7.2007, 18:18 | ||||||
| Использую Indy10.1.5 TIdTCPServer и TIdTCPClient, SSL (0.96m). Подсоединяюсь к серверу клиентом, все работает нормально. Останвливаю сервер, запускаю снова на том же порту, подсоединяюсь - и на клиенте и на сервере вылетает ERangeError: Range Check Error (причем вылетает не каждый раз) - в модуле IdIOHanlder.pas в процедуре TIdIOHandler.ReadBytes в после строки ReadFromSource:
На сервере читаю строки:
На клиенте(в потоке) аналогично:
Если делать то же самое без SSL - все нормально работает. Искал в И-нете - нашел (http://newsgroups.cryer.info/borland/public.delphi.internet.winsock/200504/0504131867.html) , что это вроде бы как баг версии Indy 10.0.52 и в следующих версиях он исправлен. Помогите, плиз! |
| Автор: MetalFan 28.7.2007, 17:50 |
| скачай последнюю 10.1.6 версию, может там эта проблема решена |
| Автор: Sokolll 29.7.2007, 06:56 | ||
скачал - то же самое :( |
| Автор: MetalFan 29.7.2007, 15:03 |
| найди ту строку, на которой действительно возникает исключение. выход за пределы массива... а те куски, что приведены, ни о чем не говорят |
| Автор: Sokolll 29.7.2007, 22:28 | ||||||||||
IDE показывает, что ошибка происходит в IdIOHandler.pas вот здесь (строка CheckForDisconnect):
Разобрался я вроде: Сначала на клиенте сделал обработку ошибок:
Ошибка все равно вылетала. Потом дошло: выполниться ли код в потоке или нет у меня зависит от FConnected, значение которого меняется на False только в обработчике IdTCPClient.OnDisconnected:
Получается, что OnDisconnected не срабатывает. Добавил строчку FConnected:=False в Run и стало работать нормально:
Работает, но не могу понять, почему не работало до этого - ведь поток то останавливаю, да и почему RangeCheckError. Без SSl все ОК. |