Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Проверить онлайн ли сервер (http://forum.oszone.net/showthread.php?t=144547)

morgan1991 08-07-2009 17:21 1162211

Проверить онлайн ли сервер
 
Здравствуйте!
Скажите пожалуйста, как можно проверить несколько десятков серверов онлайн ли они или нет?
есть IP адрес и порт нескольких скриптов автоита, если к ним коннектиться то это займёт много времени, а как по другому я не знаю...

proxy 08-07-2009 17:53 1162236

А почему бы не постариньке? - банально пропинговать?

Цитата:

Цитата morgan1991
если к ним коннектиться то это займёт много времени »

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

morgan1991 08-07-2009 17:58 1162246

Цитата:

Цитата proxy
А почему бы не постариньке? - банально пропинговать? »

Потому что пингуется вся машина, а не по определённому порту. А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд

proxy 08-07-2009 18:03 1162253

Цитата:

Цитата morgan1991
А коннектиться к каждому очень долго, причём иногда если IP оффлайн прога может коннектиться до 10 секунд »

а об offline-е я не очень подумал. Ну в принципе, можно и timeout сделать. запускать скрипт, если не выполнился через 5 сек - завершить его процесс.

morgan1991 08-07-2009 18:18 1162268

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

proxy 08-07-2009 18:24 1162280

Цитата:

Цитата morgan1991
А нельзя ли случайно откуданибудь точное время считывать »

вариант

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

Yashied 08-07-2009 19:14 1162322

Попробуй InternetCheckConnection.

Creat0R 08-07-2009 23:47 1162519

Метод через 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

Цитата:

Цитата Creat0R
Метод через TCP: »

Только если $sServer = "forum.oszone.net"
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн

Creat0R 09-07-2009 15:32 1163015

Цитата:

Цитата morgan1991
Заменить на $sServer = "fcjhfjhfjfjugv"
То всёравно пишет онлайн »

Не могу подтвердить, у меня возвращает НЕ on-line...


Время: 16:07.

Время: 16:07.
© OSzone.net 2001-