-
Понятно что его нужно спросить об этом, собственно вопрос в том и состоит как это сделать, т.к. если я просто шлю какой либо текст - то соответственно если удаленный сервер слушает - то он мне нормально отвечает, а вот если в ответ тишина - то прога наглухо виснет...
Посылаю текст таким образом :
procedure TMyChat.SendCommand(s:string);
begin
TcpClient1.Active := True;
try
if TcpClient1.Connect then
begin
TcpClient1.Sendln(s);
Edit.Clear;
end;
finally
TcpClient1.Disconnect;
end;
end;
-
> прога наглухо виснет
Не "наглухо", а на время дифолтного таймаута ожидания.
-
> TcpClient1.Active := True;
> TcpClient1.Connect
Два раза зупускать коннект - это что, для пущей надежности что ли ?)
-
А сколько это время дифолтного таймаута ожидания уже 5 мин висит... =(((
Можно сделать чего нить на подобии Ping-а тока для используемого мною порта?
Ой, ну да типа того =)))
А есть какя нибудь разница или это равнозначные команды?
-
дефолтный таймаут - инфинити
-
> уже 5 мин висит
А вот это уже подозрительно.
Не похоже это на "проблему" коннекта к отсутствующему хосту.
> Можно сделать чего нить на подобии Ping-а тока для используемого
> мною порта?
Нет, нельзя.
ping не имеет отношения к портам.
> есть какя нибудь разница или это равнозначные команды?
Концептуальной разницы нет - и там и там инициируется операция коннекта.
-
> Reindeer Moss Eater © (04.03.08 13:25) [4]
Это ж, наверно, от конкретного сокет-провайдера зависит ..
-
2 Reindeer Moss Eater ©
А как его поменять?
2 Сергей М. ©
>Не похоже это на "проблему" коннекта к отсутствующему хосту.
А что это может быть?
-
> А как его поменять?
А его и не надо менять.
Логику свою надо менять, а не таймаут.
Возьми любой сторонний тестер, к примеру,
http://www.networkcenter.info/ и проверь с пом. него доступность того же самого неактивного порта, в который ты стучишь и при этом висишь до второго пришествия. Тестер будет ждать не более полминуты, убедись сам.
-
Ясно, так а в чем тогда может быть проблема?
-
Ясно, так а в чем тогда может быть проблема?
-
> в чем тогда может быть проблема?
Что ты считаешь "проблемой" ?
-
То что программа виснет наглухо, а не на небольшой таймаут...
-
Дык, известно в чём проблема: программа неправильно написана.
Ты ещё ни слова не написал о том, как ты принимаешь ответ.
-
2 DiamondShark
Так я же говорю что она виснет когда нет ответа.., когда ответ есть - все в норме...
Меня так же интересует случай когда на удаленном компе она вообще не запущенна, а она как раз и виснет в этом случае....
-
А какая для юзера разница, наглухо или не наглухо ?
Все равно нервиничать будет и материть разработчика)
Логику надо менять, а не "проблемы" выискивать.
Либо переходи на неблок.режим либо делай коннект в доп.потоке
-
2 Сергей М.
Ну в принципе я не расчитывал на то что это прогой будет пользоваться какой либо пользователь кроме меня, так что нервничать не будет... =)))
>Либо переходи на неблок.режим
А на что это вообще влияет?, это просто в свойствах клиента и сервера поменять?, я просто с этим не разбирался и поэтому смутно представляю что это и зачем... =(((
>либо делай коннект в доп.потоке
А енто я тож не знаю как правильно сделать, боюсь ошибок много будет, ты же сам в свое время сказал что мне рано еще с этим разбираться... =)))
-
Ну в принципе я не расчитывал на то что это прогой будет пользоваться какой либо пользователь кроме меня
Сетевой чат с самим собой?
:)
-
> А на что это вообще влияет?
Как раз на то и влияет - "висеть" не будет твоя программа.
> это просто в свойствах клиента и сервера поменять?
Сервер не трожь - не о нем пока речь.
> смутно представляю что это и зачем
Вот как раз и повод есть разобраться.
Погугли по теме "сокеты блокирующий неблокирующий режим"
-
Возьми TidTCPClient. Там есть и таймаут и ексепшен в случае если целевой хост не слушает.