Показать полную графическую версию : [решено] Проверить онлайн ли сервер
morgan1991
08-07-2009, 17:21
Здравствуйте!
Скажите пожалуйста, как можно проверить несколько десятков серверов онлайн ли они или нет?
есть IP адрес и порт нескольких скриптов автоита, если к ним коннектиться то это займёт много времени, а как по другому я не знаю...
А почему бы не постариньке? - банально пропинговать?
если к ним коннектиться то это займёт много времени »
правда? а помойму быстро. тут даже интересно, что быстрее - пропинговать или к скрипту серверу AutoIt постучаться...
morgan1991
08-07-2009, 17:58
А почему бы не постариньке? - банально пропинговать? »
Потому что пингуется вся машина, а не по определённому порту. А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд
А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд »
а об offline-е я не очень подумал. Ну в принципе, можно и timeout сделать. запускать скрипт, если не выполнился через 5 сек - завершить его процесс.
morgan1991
08-07-2009, 18:18
не это не подходит, слишком много всего... ) А нельзя ли случайно откуданибудь точное время считывать, но не с локальной машины? Может клиент при входе будет в бд писать точное время входа, а остальные которые будут иногда проверять его статус будут смотреть на время и если оно не обновлялось более 5 минут значит пользователь оффлайн...
А нельзя ли случайно откуданибудь точное время считывать »
вариант (http://forum.oszone.net/post-1157737-5.html)
если проверять порт - то только TCPConnect / UDPOpen
Попробуй InternetCheckConnection (http://msdn.microsoft.com/en-us/library/aa384346(VS.85).aspx).
Метод через TCP:
$sServer = "forum.oszone.net"
$sResponse = _HTTPGetHeader($sServer, "/")
If StringRegExp($sResponse, "(?i)HTTP/\d.\d (200|301)") Then
MsgBox(64, "Проверка сервера", "Сервер [" & $sServer & "] on-line.")
Else
MsgBox(48, "Проверка сервера", "Сервер [" & $sServer & "] НЕ on-line.")
EndIf
Func _HTTPGetHeader($sHost, $sPage)
TCPStartup()
Local $sName_To_IP = TCPNameToIP($sHost)
Local $iSocket = TCPConnect($sName_To_IP, 80)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)
Return SetError(1, 0, "")
EndIf
Local $sCommand = "HEAD " & $sPage & " HTTP/1.1" & @CRLF
$sCommand &= "Host: " & $sHost & @CRLF
$sCommand &= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0" & @CRLF
$sCommand &= "Referer: " & $sHost & @CRLF
$sCommand &= "Connection: close" & @CRLF & @CRLF
Local $BytesSent = TCPSend($iSocket, $sCommand)
If $BytesSent = 0 Then Return SetError(2, @error, 0)
Local $sRecv = "", $sCurrentRecv
While 1
$sCurrentRecv = TCPRecv($iSocket, 16)
If @error <> 0 Then ExitLoop
If $sCurrentRecv <> "" Then $sRecv &= $sCurrentRecv
WEnd
TCPCloseSocket($iSocket)
TCPShutdown()
Return $sRecv
EndFunc
morgan1991
09-07-2009, 15:08
Метод через TCP: »
Только если $sServer = "forum.oszone.net"
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн »
Не могу подтвердить, у меня возвращает НЕ on-line...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.