Форум » GUI » Можно ли определить доступность СЕРВЕРА и РЕСУРСА на нем ? » Ответить

Можно ли определить доступность СЕРВЕРА и РЕСУРСА на нем ?

Andrey: Есть ли функции на МиниГуи определяющие, включен СЕРВЕР в локальной сети ? А также доступность сетевого ресурса ? Если сделать проверку определенного файла на этом ресурсе типа FILE("\\SERVER\RESURCE\file.txt"), то если включен СЕРВЕР определяется быстро, а если нет то вообще тормоз ! Устал уже боротся с пользователями, лучше табличку им повесить, СЕРВЕР НЕ ВКЛЮЧЕН !

Ответов - 16

al-sklif: Я решаю эту задачу применением Dirchange(<cDirectory>) Функция свободно шарит по сети, назначает заданную директорию текущей. В зависимости от доступности ресурса выдает результат. При этом надо не забыть, в случае успеха и если это просто была проверка доступности ресурса вернуться обратно

Andrey: al-sklif пишет: Я решаю эту задачу применением Dirchange(<cDirectory>) Я пробовал эту функцию. Если включен СЕРВЕР определяется быстро, а если нет то вообще тормоз !

al-sklif: Специально, не поленился, замерил время реакции. Если комп есть в сети, то путь прощупывается очень быстро, а вот если нет, то у меня время отклика заняло 4,5 секунды. Но это туточки. Сеть то не очень большая. Я в основном пользуюсь для проверки наличия нужных каталогов на включенных компах, поэтому наверно и не обращал внимания...


Pasha: Мне почему-то кажется, что быстрый способ в принципе невозможен. Любой способ предполангает поиск компьютера в сети, а это меееедленная операция, если такого хоста нет.

PSP: Андрей, попробуй вместо имени сервера "\\Server" написать его ip-адрес (к примеру, "\\192.168.0.100"). Возможно, побыстрей будет.

Andrey: PSP пишет: попробуй вместо имени сервера "\\Server" написать его ip-адрес (к примеру, "\\192.168.0.100" А есть ли функция перевода "\\Server" в ip-адрес ?

al-sklif: Попробовал с IP - шником! Снова замерил время отклика. При доступности компа снова практически мгновенно, а вот при его отсутствии время отклика стало еще хуже - порядка 20 сек. Хотя эта существенная разница, возможно, связано с загруженностью сети в текущий момент?! Не знаю, попробую проверить оба варианта после рабочего дня!

fil: А что, пингануть незя ?

Andrey: fil пишет: А что, пингануть незя ? Это как делать ? Если в локалке не назначены IP-адреса ? Тогда как пинговать ?

Pasha: У нас уже было похожее обсуждение: http://clipper.borda.ru/?1-4-0-00000755-000-0-0-1340610875

petr707: Можно просто вызывать командную строку PING xxxx>ping.txt результат - в файл и анализируйте текст этого файла. Например Function act_ping(crun,cans,sd,sw) Local ret:=.f. ,i Local cfile,s :="www" Local cfile_txt := ("tmp.txt") Local cFile_bat := CurDrive()+":"+DirName()+"\"+ "tmp.bat" Local cndp := "недоступен" Local cans_ := "(0% потерь)"//{"(0% потерь)"} crun :=IIF(crun=NIL,"ping 192.168.0.1",crun) cans :=IIF(cans=NIL,cans_,cans) delete file (cfile_txt) delete file (cFile_bat) strfile( crun+">"+cfile_txt ,cfile_bat,.f.) EXECANDWAIT(cfile_bat,0) sd:=filestr(cfile_txt) sw:=D2W(sd) ret := (cans $ sd) .and. !(cndp $ sd) return ret

Andrey: petr707 пишет: Можно просто вызывать командную строку PING xxxx>ping.txt результат - в файл и анализируйте текст этого файла. Нет, так не особо красиво... Есть язык высокого уровня, а мы делаем простой RUN.... Это самый крайний вариант, после Dirchange().

Pasha: На comp.lang.xharbour Enrico Maria Giordano дал ping для win-платформы. Я не проверял. [pre]#pragma BEGINDUMP #include <hbapi.h> #include <winsock2.h> #include <iphlpapi.h> #include <icmpapi.h> int hb_Ping( const char * cp ) { HANDLE hIcmpFile; unsigned long ipaddr; DWORD dwRetVal; char SendData[32] = "Data Buffer"; LPVOID ReplyBuffer; DWORD ReplySize; if( isalpha( cp[0] ) ) //host address is a name { WSADATA wsaData; int iResult; iResult = WSAStartup( MAKEWORD(2, 2), &wsaData ); if( iResult == 0 ) { struct hostent *remoteHost = gethostbyname( cp ); if( remoteHost != NULL ) ipaddr = *(unsigned long *) remoteHost->h_addr_list[0]; WSACleanup(); } } else ipaddr = inet_addr( cp ); if (ipaddr == INADDR_NONE) return 1; hIcmpFile = IcmpCreateFile(); if (hIcmpFile == INVALID_HANDLE_VALUE) return 2; ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData); ReplyBuffer = (VOID*) malloc(ReplySize); if (ReplyBuffer == NULL) { IcmpCloseHandle(hIcmpFile); return 3; } dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData), NULL, ReplyBuffer, ReplySize, 1000); free(ReplyBuffer); IcmpCloseHandle(hIcmpFile); if (dwRetVal == 0) return 4; return 0; } HB_FUNC( HB_PING ) { hb_retni( hb_Ping( hb_parc( 1 ) ) ); } #pragma ENDDUMP [/pre]

Andrey: Не собирается: Harbour 3.2.0dev (Rev. 18071) Copyright (c) 1999-2012, http://harbour-project.org/ Compiling 'ping_test.prg'... Lines 81, Functions/Procedures 1 Generating C source output to 'ping_test.c'... Done. C compile error. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland ping_test.c: Error E2209 ping_test.prg 14: Unable to open include file 'icmpapi.h' Warning W8065 ping_test.prg 48: Call to function 'IcmpCreateFile' with no prototype in function hb_Ping Warning W8069 ping_test.prg 48: Nonportable pointer conversion in function hb_Ping Warning W8065 ping_test.prg 56: Call to function 'IcmpCloseHandle' with no prototype in function hb_Ping Warning W8065 ping_test.prg 62: Call to function 'IcmpSendEcho' with no prototype in function hb_Ping Warning W8065 ping_test.prg 66: Call to function 'IcmpCloseHandle' with no prototype in function hb_Ping *** 1 errors in Compile ***

Pasha: В *.h bcc55 действительно нет прототипов для этих функций. А в bcc582 они есть, и в mingw тоже есть. Дальнейшие действия очевидны без подсказки.

SADSTAR4: если просто пингануть - то можно так CallDll32 ( "Ping" , "TestInternetConnection.DLL" , IPAddr, 1000 ) ДЛЛка - здесь http://narod.ru/disk/64380948001.5c9a4f1d1565600282c46e529d4203bc/TestInternetConnection.dll.html



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