Page 1 sur 1
reponse a un ping sans pointeur
Publié : jeu. 15/nov./2012 14:34
par supercdfr
Bonjour
J'ai trouvé ce code sur le forum anglais :
Code : Tout sélectionner
Procedure TestInetConnection()
SendData$ = "Test"
ReplyBuffer$ = Space(SizeOf(ICMP_ECHO_REPLY) + Len(SendData$) + SizeOf(character))
hIcmpFile = IcmpCreateFile_()
dwRetVal = IcmpSendEcho_(hIcmpFile, inet_addr_("192.168.0.1"), @SendData$, Len(SendData$), #Null, @ReplyBuffer$, Len(ReplyBuffer$) + SizeOf(ICMP_ECHO_REPLY), 1000)
If dwRetVal
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Debug TestInetConnection()
Il est très bien, mais est-il possible de récupérer le temps de réponse, qui doit normalement être dans ReplyBuffer sans passer par un pointeur ? Tous les autres code passe par
Code : Tout sélectionner
*Result = AllocateMemory(ResultSize)
*Echo.ICMP_ECHO_REPLY = *Result
Et je veut absolument éviter *Result = AllocateMemory(ResultSize)
Re: reponse a un ping sans pointeur
Publié : jeu. 15/nov./2012 16:15
par graph100
Code : Tout sélectionner
Procedure TestInetConnection()
SendData$ = "Test"
ReplyBuffer$ = Space(SizeOf(ICMP_ECHO_REPLY) + Len(SendData$) + SizeOf(character))
hIcmpFile = IcmpCreateFile_()
dwRetVal = IcmpSendEcho_(hIcmpFile, inet_addr_("192.168.0.1"), @SendData$, Len(SendData$), #Null, @ReplyBuffer$, Len(ReplyBuffer$) + SizeOf(ICMP_ECHO_REPLY), 1000)
*Echo.ICMP_ECHO_REPLY = @ReplyBuffer$
Debug *echo\RoundTripTime
If dwRetVal
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Debug TestInetConnection()
C'est bien le retour que tu voulais en debug ?
Moi ca me donne environ la même valeur que le ping de windows
Re: reponse a un ping sans pointeur
Publié : jeu. 15/nov./2012 17:17
par GallyHC
Bonjour,
Voila une petite routine que j'ai modifier pour donné le temps en Ms.
Code : Tout sélectionner
; +======================================================+
; | |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2012, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.51 |
; +--------------+---------------------------------------+
; | VER & REV | 0.0.1 |
; +--------------+---------------------------------------+
; | Program name | main.pb |
; +======================================================+
; +======================================================+
; | Original Version: 0.0.1 |
; +--------------+---------------------------------------+
; | Created by | GallyHomeCorp |
; | Graphix by | |
; +--------------+---------------------------------------+
; | Comments: | |
; +--------------+ |
; | |
; | |
; | |
; +======================================================+
; +======================================================+
; | Système d'Exploitation |
; +--------------+---------------------------------------+
; | Window | Oui |
; | Linux | Non |
; | MacOS | Non |
; +======================================================+
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
EnableExplicit
#PING_TIMEOUT = 100
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure lngNewAddress(address.s)
;
Define A1.l
Define A2.l
Define A3.l
Define A4.l
Define Pos.l
Define sDummy.s
Define ldummy.l
sDummy = address
Pos = FindString(sDummy, ".",1)
If Pos>0
A1 = Val(Left(sDummy,Pos-1))
sDummy = Right(sDummy,Len(sDummy)-Pos)
Pos = FindString(sDummy, ".",1)
If Pos>0
A2 = Val(Left(sDummy,Pos-1))
sDummy = Right(sDummy,Len(sDummy)-Pos)
Pos = FindString(sDummy, ".",1)
If Pos>0
A3 = Val(Left(sDummy,Pos-1))
sDummy = Right(sDummy,Len(sDummy)-Pos)
A4 = Val(sDummy)
ldummy.l = 0
PokeB(@ldummy, A1)
PokeB(@ldummy+1,A2)
PokeB(@ldummy+2,A3)
PokeB(@ldummy+3,A4)
ProcedureReturn ldummy
EndIf
EndIf
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure Ping(sAddress.s, munpass.l = 4)
; ROUTINE DE GESTION DES PING.
Define i.l
Define lngHPort.l
Define lngDAddress.l
Define strMessage.s
Define TheIPAddress.s
Define *buffer
Define LostPackets = 0
Define SuccessTrip = 0
Define RecdPackets = 0
Define ECHO.ICMP_ECHO_REPLY
If Asc(Mid(sAddress,1,1)) < 48 Or Asc(Mid(sAddress,1,1)) > 57
ProcedureReturn #False
EndIf
TheIPAddress = sAddress
lngDAddress = lngNewAddress(sAddress)
lngHPort = IcmpCreateFile_()
*buffer = AllocateMemory(SizeOf(ICMP_ECHO_REPLY))
For i=0 To munpass
If IcmpSendEcho_(lngHPort, lngDAddress, @strMessage, #Null, #Null, *buffer, SizeOf(ICMP_ECHO_REPLY), #PING_TIMEOUT) = 0
LostPackets + 1
Else
CopyMemory(*buffer, @ECHO, SizeOf(ICMP_ECHO_REPLY))
;
; ICI
;
Debug Str(ECHO\RoundTripTime) + " Ms"
;
; ICI
;
SuccessTrip + 1
EndIf
Delay(100)
Next i
FreeMemory(*buffer)
If LostPackets < SuccessTrip
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
If ping("192.168.0.45") = #True
Debug "PASSE"
Else
Debug "PASSE PAS"
EndIf
Cordialement,
GallyHC
Re: reponse a un ping sans pointeur
Publié : jeu. 15/nov./2012 17:59
par graph100
pourquoi tu fais un copymemory ? c'est pas utile...
@supercdfr : je ne comprend pas trop pourquoi tu utilises space() pour allouer de la mémoire à la place de allocatememory(), ya surement une raison, mais comme ca retourne un string, ça doit être plus lent qu'utiliser un buffer.
Re: reponse a un ping sans pointeur
Publié : jeu. 15/nov./2012 18:22
par GallyHC
Bonjour,
graph100> c'est pas faux, voila une version simplifier :
Code : Tout sélectionner
; +======================================================+
; | |
; +------------------------------------------------------+
; | COPYRIGHT(C)2007-2012, ALL RIGHT RESERVED KOAKDESIGN |
; +--------------+---------------------------------------+
; | Program type | PUREBASIC 4.51 |
; +--------------+---------------------------------------+
; | VER & REV | 0.0.1 |
; +--------------+---------------------------------------+
; | Program name | main.pb |
; +======================================================+
; +======================================================+
; | Original Version: 0.0.1 |
; +--------------+---------------------------------------+
; | Created by | GallyHomeCorp |
; | Graphix by | |
; +--------------+---------------------------------------+
; | Comments: | |
; +--------------+ |
; | |
; | |
; | |
; +======================================================+
; +======================================================+
; | Système d'Exploitation |
; +--------------+---------------------------------------+
; | Window | Oui |
; | Linux | Non |
; | MacOS | Non |
; +======================================================+
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
EnableExplicit
#PING_TIMEOUT = 100
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
Procedure Ping(sAddress.s, munpass.l = 4)
; ROUTINE DE GESTION DES PING.
Define i.l
Define lngHPort.l
Define strMessage.s
Define LostPackets = 0
Define SuccessTrip = 0
Define ECHO.ICMP_ECHO_REPLY
If Asc(Mid(sAddress, 1, 1)) < 48 Or Asc(Mid(sAddress, 1, 1)) > 57
ProcedureReturn #False
EndIf
lngHPort = IcmpCreateFile_()
For i=0 To munpass
If IcmpSendEcho_(lngHPort, inet_addr_(sAddress), @strMessage, #Null, #Null, @ECHO, SizeOf(ICMP_ECHO_REPLY), #PING_TIMEOUT) = 0
LostPackets + 1
Else
;
; ICI
;
Debug Str(ECHO\RoundTripTime) + " Ms"
;
; ICI
;
SuccessTrip + 1
EndIf
Delay(100)
Next i
If LostPackets < SuccessTrip
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; +--------------------------------------------------------------------------+
; | |
; +--------------------------------------------------------------------------+
If ping("192.168.0.45") = #True
Debug "PASSE"
Else
Debug "PASSE PAS"
EndIf
Re: reponse a un ping sans pointeur
Publié : ven. 16/nov./2012 12:18
par supercdfr
J’espérais pas tant de réponse
j'ai trouver ça sur un forum anglais, ou il utilisait SPACE. Et cela m'arrange car qui dis allocatememory dis pointeur, ce que je veut éviter.
En tout cas, merci encore.
Re: reponse a un ping sans pointeur
Publié : sam. 17/nov./2012 2:53
par graph100
supercdfr a écrit :qui dis allocatememory dis pointeur, ce que je veut éviter.
non tu peux aussi utiliser les peekX() et pokeX() mais c'est trop chiant
