Für allgemeine Fragen zur Programmierung mit PureBasic.
pvmichael
Beiträge: 144 Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:
Beitrag
von pvmichael » 17.11.2004 01:04
Hallo!
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
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
Deeem2031
Beiträge: 1232 Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:
Beitrag
von Deeem2031 » 17.11.2004 01:37
Nur 'ne Idee, hab keinen Comp ohne Netzwerkkarte
Code: Alles auswählen
...
Global Wsad.WSAdata
If WSAStartup_($101, Wsad) = 0
*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
EndIf
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
stbi
Beiträge: 685 Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills
Beitrag
von stbi » 18.11.2004 15:16
vielleicht das mal an den Anfang stellen:
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Network (Server) example file
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
If InitNetwork() = 0
MessageRequester("Error", "Can't initialize the network !", 0)
End
EndIf
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
NicTheQuick
Ein Admin
Beiträge: 8820 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 18.11.2004 15:27
Versuch mal meinen Code, der eigentlich aus allen möglichen zusammengesetzt worden ist. Man kann hier IPs, Computernamen und Webseiten angeben. Bei Computernamen und Websites wird beim Pong die IP des jeweiligen Computers oder der Webseite angezeigt.
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
If InitNetwork() = 0
MessageRequester("Ping", "Initialisierung des Netzwerks fehlgeschlagen.")
End
EndIf
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