-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
morgan1991 |
08-07-2009 17:21 1162211 |
Проверить онлайн ли сервер
Здравствуйте!
Скажите пожалуйста, как можно проверить несколько десятков серверов онлайн ли они или нет?
есть IP адрес и порт нескольких скриптов автоита, если к ним коннектиться то это займёт много времени, а как по другому я не знаю...
|
А почему бы не постариньке? - банально пропинговать?
Цитата:
Цитата morgan1991
если к ним коннектиться то это займёт много времени »
|
правда? а помойму быстро. тут даже интересно, что быстрее - пропинговать или к скрипту серверу AutoIt постучаться...
|
morgan1991 |
08-07-2009 17:58 1162246 |
Цитата:
Цитата proxy
А почему бы не постариньке? - банально пропинговать? »
|
Потому что пингуется вся машина, а не по определённому порту. А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд
|
Цитата:
Цитата morgan1991
А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд »
|
а об offline-е я не очень подумал. Ну в принципе, можно и timeout сделать. запускать скрипт, если не выполнился через 5 сек - завершить его процесс.
|
morgan1991 |
08-07-2009 18:18 1162268 |
не это не подходит, слишком много всего... ) А нельзя ли случайно откуданибудь точное время считывать, но не с локальной машины? Может клиент при входе будет в бд писать точное время входа, а остальные которые будут иногда проверять его статус будут смотреть на время и если оно не обновлялось более 5 минут значит пользователь оффлайн...
|
Цитата:
Цитата morgan1991
А нельзя ли случайно откуданибудь точное время считывать »
|
вариант
если проверять порт - то только TCPConnect / UDPOpen
|
Метод через 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 1163002 |
Только если $sServer = "forum.oszone.net"
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн
|
Цитата:
Цитата morgan1991
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн »
|
Не могу подтвердить, у меня возвращает НЕ on-line...
|
Время: 16:07.
© OSzone.net 2001-