Конференция "Сети" » Как узнать активен ли удаленный сервер? [WinXP]
 
  • Andrewtitoff © (04.03.08 12:59) [0]
    Понятно что его нужно спросить об этом, собственно вопрос в том и состоит как это сделать, т.к. если я просто шлю какой либо текст - то соответственно если удаленный сервер слушает - то он мне нормально отвечает, а вот если в ответ тишина - то прога наглухо виснет...

    Посылаю текст таким образом :

    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;

  • Сергей М. © (04.03.08 13:05) [1]

    > прога наглухо виснет


    Не "наглухо", а на время дифолтного таймаута ожидания.
  • Сергей М. © (04.03.08 13:07) [2]

    > TcpClient1.Active := True;


    > TcpClient1.Connect


    Два раза зупускать коннект - это что, для пущей надежности что ли ?)
  • Andrewtitoff © (04.03.08 13:18) [3]
    А сколько это время дифолтного таймаута ожидания уже 5 мин висит... =(((
    Можно сделать чего нить на подобии Ping-а тока для используемого мною порта?

    Ой, ну да типа того =)))
    А есть какя нибудь разница или это равнозначные команды?
  • Reindeer Moss Eater © (04.03.08 13:25) [4]
    дефолтный таймаут - инфинити
  • Сергей М. © (04.03.08 13:26) [5]

    > уже 5 мин висит


    А вот это уже подозрительно.
    Не похоже это на "проблему" коннекта к отсутствующему хосту.


    > Можно сделать чего нить на подобии Ping-а тока для используемого
    > мною порта?


    Нет, нельзя.
    ping не имеет отношения к портам.


    > есть какя нибудь разница или это равнозначные команды?


    Концептуальной разницы нет - и там и там инициируется операция коннекта.
  • Сергей М. © (04.03.08 13:39) [6]

    > Reindeer Moss Eater ©   (04.03.08 13:25) [4]


    Это ж, наверно, от конкретного сокет-провайдера зависит ..
  • Andrewtitoff © (04.03.08 13:40) [7]
    2 Reindeer Moss Eater ©
    А как его поменять?

    2 Сергей М. ©
    >Не похоже это на "проблему" коннекта к отсутствующему хосту.
    А что это может быть?
  • Сергей М. © (04.03.08 13:47) [8]

    > А как его поменять?


    А его и не надо менять.

    Логику свою надо менять, а не таймаут.

    Возьми любой сторонний тестер, к примеру, http://www.networkcenter.info/ и проверь с пом. него доступность того же самого неактивного порта, в который ты стучишь и при этом висишь до второго пришествия. Тестер будет ждать не более полминуты, убедись сам.
  • Andrewtitoff © (04.03.08 13:56) [9]
    Ясно, так а в чем тогда может быть проблема?
  • Andrewtitoff © (04.03.08 13:56) [10]
    Ясно, так а в чем тогда может быть проблема?
  • Сергей М. © (04.03.08 14:06) [11]

    > в чем тогда может быть проблема?


    Что ты считаешь "проблемой" ?
  • Andrewtitoff © (04.03.08 14:07) [12]
    То что программа виснет наглухо, а не на небольшой таймаут...
  • DiamondShark © (04.03.08 14:14) [13]
    Дык, известно в чём проблема: программа неправильно написана.
    Ты ещё ни слова не написал о том, как ты принимаешь ответ.
  • Andrewtitoff © (04.03.08 14:26) [14]
    2 DiamondShark
    Так я же говорю что она виснет когда нет ответа.., когда ответ есть - все в норме...
    Меня так же интересует случай когда на удаленном компе она вообще не запущенна, а она как раз и виснет в этом случае....
  • Сергей М. © (04.03.08 14:37) [15]
    А какая для юзера разница, наглухо или не наглухо ?
    Все равно нервиничать будет и материть разработчика)

    Логику надо менять, а не "проблемы" выискивать.
    Либо переходи на неблок.режим либо делай коннект в доп.потоке
  • Andrewtitoff © (04.03.08 14:53) [16]
    2 Сергей М.

    Ну в принципе я не расчитывал на то что это прогой будет пользоваться какой либо пользователь кроме меня, так что нервничать не будет...  =)))

    >Либо переходи на неблок.режим
    А на что это вообще влияет?, это просто в свойствах клиента и сервера поменять?, я просто с этим не разбирался и поэтому смутно представляю что это и зачем...  =(((

    >либо делай коннект в доп.потоке
    А енто я тож не знаю как правильно сделать, боюсь ошибок много будет, ты же сам в свое время сказал что мне рано еще с этим разбираться... =)))
  • Reindeer Moss Eater © (04.03.08 15:12) [17]
    Ну в принципе я не расчитывал на то что это прогой будет пользоваться какой либо пользователь кроме меня

    Сетевой чат с самим собой?
    :)
  • Сергей М. © (04.03.08 15:14) [18]

    > А на что это вообще влияет?


    Как раз на то и влияет - "висеть" не будет твоя программа.


    > это просто в свойствах клиента и сервера поменять?


    Сервер не трожь - не о нем пока речь.


    > смутно представляю что это и зачем


    Вот как раз и повод есть разобраться.
    Погугли по теме "сокеты блокирующий неблокирующий режим"
  • Reindeer Moss Eater © (04.03.08 15:24) [19]
    Возьми TidTCPClient. Там есть и таймаут и ексепшен в случае если целевой хост не слушает.
  • Andrewtitoff © (04.03.08 15:30) [20]
    2 Reindeer Moss Eater

    А кто тебе вообще сказал что это чат?, можно конечно использовать и ка чат, но меня это функция меньше всего интересует...

    2 Сергей М.
    Пасибо, тока теперь буквально через пару секунд вываливается с ошибкой "access violation at 0x7c90eddc: write of address 0x00040fbl"....  =(((
  • Reindeer Moss Eater © (04.03.08 15:33) [21]
    Мне никто не сказал, я твой код почитал
  • Сергей М. © (04.03.08 15:40) [22]

    > Reindeer Moss Eater ©   (04.03.08 15:24) [19]
    >
    > Возьми TidTCPClient


    Если мне не изменяет память, автор некоторое время назад чуть ли не из штанов выпрыгмвал, пытаясь аргументировать выбор им именно TCPClient/Server)


    > Andrewtitoff ©   (04.03.08 15:30) [20]



    > вываливается с ошибкой


    У меня не "вываливается". В чем я провинился ?) Что делаю не так ?)
  • grisme (06.03.08 17:19) [23]

    > Reindeer Moss Eater ©   (04.03.08 15:33) [21]


    палицо %) щас будут отмазки
 
Конференция "Сети" » Как узнать активен ли удаленный сервер? [WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]