Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Компонент idTCPClient


Автор: Artem91 11.11.2007, 13:38
Я делаю программу клиент-сервер. Клиент отправляет серверу запрос, на что сервер ему должен ответить, но иногда бывает, что сервер долго не отвечает.
 Вот пример кода клиента
 
Код

tcp.connect;
tcp.writeln('Hello');
Label.caption:= tcp.readln; //вот здесь бывает подвисает сек на 10, вроде бы из-за сервера, но я 
tcp.disconnect;                   //не уверен


Может кто знает как от этого избавиться, например, оборвать чтение, если задержка больше 2 сек

Автор: dumb 11.11.2007, 13:50
Код

try
  Label.caption:= tcp.readln(#0, 2000); // timeout = 2000ms
except
  Label.caption:= 'время вышло';
end;

Автор: Artem91 11.11.2007, 13:56
Да, я так делал, но у меня почему то всеравно не работает, как надо!!!

Автор: dumb 11.11.2007, 14:08
Цитата(Artem91 @  11.11.2007,  13:56 Найти цитируемый пост)
я так делал, но у меня почему то всеравно не работает, как надо!
если бы ты описал "как надо" и как именно оно у тебя работает/не работает(с приведением текста ошибок, более полного кода, итд), было бы проще.

Автор: Artem91 11.11.2007, 14:14
Мне нужно, чтобы tcp.readln считывало только в течении пары секунд и если за это время никаких данных не пришло,  заканчивало чтение и выводило сообщение об отсутствии данных...
А у меня получается, что tcp.readln работает до тех пор, пока данные не придут!!!

Автор: Snowy 12.11.2007, 13:09
Поставь Indy10. В 9-й инди таймаут игнорируется.

Автор: dumb 12.11.2007, 20:24
Цитата(Snowy @  12.11.2007,  13:09 Найти цитируемый пост)
В 9-й инди таймаут игнорируется.
эм. у меня на 9ке(9.0.17) таймаут прекрасно работает. есть подозрение, что это в дефолтной версии, поставляемой с дельфи не пашет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)