Форум » [x]Harbour » Доступность серверов (аналог Ping) » Ответить

Доступность серверов (аналог Ping)

Wolfv: Есть ли в Harbour аналог команды ping? Собственно что нужно, есть ряд серверов, нужно проверять их доступность. Как вариант посылать периодически Ping. Если ли что то похожее в Harbour?

Ответов - 6

AlexMyr: Это http сервер, файловий, ftp, ... ? К примеру http используя hbtip, [pre2] oHttp := TIpClientHttp():new( "http://www." ) IF ! oHttp:open() ? "Connection error:", oHttp:lastErrorMessage() QUIT ENDIF[/pre2]

Wolfv: Увы, нет. Это может быть сервер БД или виртуальная машина, просто нужно мониторить ее доступность.

AlexMyr: Тогда копай в сторону hb_processRun( ) [pre2]func main() local str1 := space(100) hb_processRun( "ping 192.168.x.x" , , @str1 ) ?"str1" ?str1 return nil[/pre2] дальше разбирай str1


SADSTAR4: http://citforum.ru/nets/articles/ping/ Теперь для реализации пинга хоста мы: создаем соединение; вызываем ICMPSendEcho; обрабатываем результат; закрываем соединение. Эти действия удобно оформить в виде процедуры: procedure Ping (const Address, EchoString: PChar; var PingReply: TsmICMP_Echo_Reply; const PingTimeout: Integer = 500); var IPAddress: TipAddr; ICMPPort: THandle; begin // Конвертация IP в понятный для API формат IPAddress:= inet_addr (Address); // Проверка корректности конвертации if (IPAddress = INADDR_NONE) then begin raise Exception.Create ('Function call inet_addr failed. ' + 'The IP address is probably invalid.'); end; // Открытие соединения ICMPPort:= IcmpCreateFile (); // Проверка правильности открытия if (ICMPPort = INVALID_HANDLE_VALUE) then begin raise Exception.Create ('Function call IcmpCreateFile failed.'); end; // Отправка запроса "пинг" IcmpSendEcho (ICMPPort, IPAddress, EchoString, Length (EchoString), nil, @PingReply, SizeOf (PingReply), PingTimeout); // Закрытие соединения IcmpCloseHandle (ICMPPort); end; Теперь при использовании в коде программы конструкции: Ping ('127.0.0.1',nil,Reply,5000); в переменной Reply мы получим результат пинга.

SADSTAR4: еще вариант Я тут ДЛЛку накропал размером 5кб Вызывается так IPAddr="192.168.0.1" ? "Ping("+IPAddr+", 1000)=" ?? Str(CallDll32 ( "Ping" , "TestInternetConnection.DLL" , IPAddr, 1000 )) IPAddr="192.168.0.178" ? "Ping("+IPAddr+", 3000)=" ?? Str(CallDll32 ( "Ping" , "TestInternetConnection.DLL" , IPAddr, 3000 )) вроде работает функция Ping(strAddr, TimeOutMs) возвращает 0 или 1 Если кому надо - пишите - куда прислать или выложить

Wolfv: SADSTAR4 если можно пришлите на ящик wolfv @ ukr.net. Большое спасибо!



полная версия страницы