Войти

Показать полную графическую версию : [решено] Проверить онлайн ли сервер


morgan1991
08-07-2009, 17:21
Здравствуйте!
Скажите пожалуйста, как можно проверить несколько десятков серверов онлайн ли они или нет?
есть IP адрес и порт нескольких скриптов автоита, если к ним коннектиться то это займёт много времени, а как по другому я не знаю...

proxy
08-07-2009, 17:53
А почему бы не постариньке? - банально пропинговать?

если к ним коннектиться то это займёт много времени »
правда? а помойму быстро. тут даже интересно, что быстрее - пропинговать или к скрипту серверу AutoIt постучаться...

morgan1991
08-07-2009, 17:58
А почему бы не постариньке? - банально пропинговать? »
Потому что пингуется вся машина, а не по определённому порту. А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд

proxy
08-07-2009, 18:03
А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд »
а об offline-е я не очень подумал. Ну в принципе, можно и timeout сделать. запускать скрипт, если не выполнился через 5 сек - завершить его процесс.

morgan1991
08-07-2009, 18:18
не это не подходит, слишком много всего... ) А нельзя ли случайно откуданибудь точное время считывать, но не с локальной машины? Может клиент при входе будет в бд писать точное время входа, а остальные которые будут иногда проверять его статус будут смотреть на время и если оно не обновлялось более 5 минут значит пользователь оффлайн...

proxy
08-07-2009, 18:24
А нельзя ли случайно откуданибудь точное время считывать »
вариант (http://forum.oszone.net/post-1157737-5.html)

если проверять порт - то только TCPConnect / UDPOpen

Yashied
08-07-2009, 19:14
Попробуй InternetCheckConnection (http://msdn.microsoft.com/en-us/library/aa384346(VS.85).aspx).

Creat0R
08-07-2009, 23:47
Метод через 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"
То всёравно пишет онлайн

Creat0R
09-07-2009, 15:32
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн »
Не могу подтвердить, у меня возвращает НЕ on-line...




© OSzone.net 2001-2012