Eerst je netwerk testen met Ping in AutoIt

autoit: met Ping eerst checken of iets bereikbaar is

Met Ping() kun je snel testen of een server of internetadres antwoord geeft. Dat is handig als je niet meteen verder wilt met de rest van je script, omdat de verbinding eerst goed moet zijn.

Kort probleem

Soms wil je een taak pas starten als een server online is. Of je wilt weten of internet werkt voordat je een download of update doet. Als je dan blind doorgaat, krijg je later fouten die lastiger te snappen zijn.

Ping() helpt dan als snelle bereikcheck. De functie stuurt een klein netwerkpakketje weg en wacht op antwoord. Komt er geen antwoord terug, dan weet je dat de andere kant niet bereikbaar is, of in elk geval niet reageert binnen de tijd die jij geeft.

Hoe werkt Ping in AutoIt?

De functie is simpel in gebruik:

Ping(hostname[, timeout])

De eerste waarde is het adres of de naam die je wilt testen. Dat kan een servernaam, domeinnaam of IP-adres zijn. De tweede waarde is de timeout, dus de wachttijd in milliseconden.

Een timeout is de maximale tijd die AutoIt wacht op antwoord. Staat die te laag, dan krijg je sneller een foutmelding, ook als de server gewoon wat traag is.Staat die te hoog,dan blijft je script lang hangen als het adres echt niet bereikbaar is.

Wat betekent de uitkomst?

Volgens de bron geeft Ping() de round-trip tijd terug in milliseconden als het lukt. Dat is de tijd heen en terug. Krijgt AutoIt geen antwoord, dan geeft de functie 0 terug.

Dat is fijn, want je kunt daar direct op testen. Dus:

  • > 0 = bereikbaar
  • = 0 = geen antwoord binnen de timeout

stap voor stap

Eerst kies je het adres dat je wilt testen. daarna bepaal je hoe lang je wilt wachten. Daarna lees je de uitkomst en toon je een melding of schrijf je iets naar het scherm.

Een simpele aanpak is deze:

  1. Vraag een adres op of zet het direct in je script.
  2. Roep ping() aan.
  3. Check of de uitkomst groter is dan 0.
  4. Maak dan pas de volgende stap van je script.

Zo voorkom je dat je meteen een fout krijgt bij een netwerkstap die nog niet kan werken.

Voorbeeldcode

Local $sHost = "www.autoitscript.com"
local $iTimeout = 2000 ; 2000 ms = 2 seconden

Local $iPing = Ping($sHost, $iTimeout)

If $iPing > 0 Then
    MsgBox(64, "Netwerkcheck", $sHost & " is bereikbaar." & @CRLF & "Tijd: " & $iPing & " ms")
Else
    ConsoleWrite($sHost & " gaf geen antwoord binnen " & $iTimeout & " ms" & @CRLF)
EndIf

In dit voorbeeld test je eerst of de site antwoord geeft. Als dat zo is, laat

MsgBox()

een venster zien. Als er geen antwoord komt, schrijf je iets weg met

ConsoleWrite()

.

Dat tweede pad is handig als je script stil moet draaien. ConsoleWrite() zet de tekst in de console.dat is vaak prettig bij testen of bij kleine hulpscripts.

Timeout goed kiezen

De timeout is een belangrijk deel van deze functie. Het is niet alleen een technische instelling. Het bepaalt ook hoe vlot je script aanvoelt.

Hier is een klein overzicht:

TimeoutGevolg
Te laagTrage maar werkende server lijkt onbereikbaar
Goed gekozenSnelle en bruikbare check
Te hoogScript wacht lang bij echte fout

Als je een snelle check wilt, kun je een korte timeout nemen. Wil je liever wat ruimere tijd geven, dan mag die hoger zijn. Dat hangt af van je doel.

Bij een server in hetzelfde netwerk kan een korte timeout vaak genoeg zijn.Bij een internetadres kan een iets ruimere timeout beter zijn,omdat internet soms schommelt. De bron laat zien dat Ping() juist deze timeout als optie heeft, dus gebruik die bewust.

Kleine test met twee paden

Je kunt de uitkomst ook gebruiken om twee duidelijk verschillende stappen te doen. Dat maakt je script slimmer.

Local $sServer = "192.168.1.10"
Local $iResult = Ping($sServer, 1000)

If $iResult = 0 Then
    MsgBox(16, "Fout", "Server niet bereikbaar.")
Else
    MsgBox(64, "Ok", "Antwoord in " & $iResult & " ms.")
endif

Hier zie je meteen het simpele patroon. Geen antwoord? Dan stop je of kies je een ander pad. Wel antwoord? Dan kun je verder met je echte werk.

Dit is handig als je bijvoorbeeld eerst wilt checken of een netwerkshare, database of webserver bereikbaar is. De bron gaat over bereikchecken, en dit is precies waar Ping() voor bedoeld is.

Veelgemaakte fout

Een veelgemaakte fout is te snel aannemen dat Ping() alleen “werkt” of “niet werkt”. er zit nog iets tussen: de wachttijd. Een timeout van 500 ms kan prima zijn op een snel en stabiel netwerk, maar te kort op een trager pad.

Nog een fout is dat mensen meteen doorgaan na een ping zonder de uitkomst te testen. Dan heeft die check weinig nut. De kracht zit juist in de If-controle erna.

Let ook op dat Ping() een tijd teruggeeft in milliseconden, niet in seconden. Dat verschil is klein in taal,maar groot in een script. 2000 betekent dus 2 seconden wachten.

Kleine uitbreiding

Je kunt de check ook net wat netter maken door het adres en de timeout bovenin te zetten.Dan is het later makkelijk aan te passen zonder door je hele script te zoeken.

Local $sHost = "server.lokaal"
Local $iTimeout = 1500

Local $iPing = Ping($sHost, $iTimeout)

if $iPing = 0 Then
    ConsoleWrite("Geen antwoord van " & $sHost & " binnen " & $iTimeout & " ms" & @CRLF)
    Exit
EndIf

ConsoleWrite($sHost & " is bereikbaar: " & $iPing & " ms" & @CRLF)

Hier stopt het script meteen als de server niet reageert. Dat is handig als de rest geen zin heeft zonder netwerkverbinding. Zo hou je fouten vroeg tegen.

Snelle samenvatting

Ping() is de makkelijke AutoIt-functie om bereik te checken. je geeft een host op en optioneel een timeout. Krijg je een waarde groter dan 0 terug, dan is er antwoord. Krijg je 0 terug, dan was er geen antwoord binnen de tijd.

De timeout is dus niet zomaar een extraatje.Die bepaalt hoe streng je check is. Kies hem passend bij je netwerk en je doel.

Voor de officiële uitleg kun je ook kijken naar de AutoIt-documentatie van Ping() op de AutoIt-website en naar de algemene AutoIt-documentatie als je meer functies naast deze wilt gebruiken.

Bevers gedachte

Een goede bereikcheck voorkomt gedoe later. eerst even ping laten praten, dan pas het zware werk doen. Dat maakt je script rustiger, slimmer en net wat minder koppig. 🦫