Ping - Programmabsturz
Verfasst: 17.11.2004 01:04
Hallo!
im alten Forum habe ich folgenden Code gefunden:
Grundsätzlich funktioniert er gut, jedoch stürzt er auf einem Computer ab, wenn er keine Netzwerkkarte hat. Wie fängt man das am besten ab?
Grüsse
Michael
im alten Forum habe ich folgenden Code gefunden:
Code: Alles auswählen
Procedure Ping(Add.s) ; If Result < 0 : Error : Else : Result = Time_in_ms ;)
#PING_TIMEOUT = 2000
Echo_Buffer = AllocateMemory(SizeOf(ICMP_ECHO_REPLY)+8)
ECHO.ICMP_ECHO_REPLY
lngHPort = IcmpCreateFile_()
If lngHPort
lngResult = IcmpSendEcho_(lngHPort, inet_addr_(Add), "Echo This.", 10, 0, Echo_Buffer, SizeOf(ICMP_ECHO_REPLY)+8, #PING_TIMEOUT)
CopyMemory(Echo_Buffer,ECHO,SizeOf(ICMP_ECHO_REPLY))
If lngResult = 0
PingResult = -1 ;Timeout
Else
If inet_addr_(Add) = ECHO\Address
PingResult = ECHO\RoundTripTime
Else
If ECHO\Status = 0
PingResult = ECHO\RoundTripTime
Else
PingResult = -2 ;IP nicht erreichbar
EndIf
EndIf
EndIf
lngResult = IcmpCloseHandle_(lngHPort)
Else
PingResult = -3 ;IcmpCreateFile_() = 0 ...
EndIf
FreeMemory(Echo_Buffer)
ProcedureReturn PingResult
EndProcedure
IPe.s = ProgramParameter()
If IPe = ""
IPe = Trim(InputRequester("Ping (Rings -> Deeem2031 -> Dristar -> NicTheQuick)", "IP oder Name zum pingen angeben:", ""))
EndIf
Global Wsad.WSAdata
WSAStartup_($101, Wsad)
*lpHost = gethostbyname_(IPe)
lpIp = PeekL(*lpHost + 12)
IPl.l = PeekL(lpIp)
IP.s = IPString(PeekL(IPl))
Ping.l = Ping(IP)
If Ping < 0
MessageRequester("Ping", "Fehler bei der Eingabe oder kein Pingen möglich.", 0)
Else
MessageRequester("Ping: " + IPe, "IP: " + IP + Chr(13) + "Pong: " + Str(Ping) + " ms", 0)
EndIf
Grüsse
Michael