Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
supercdfr
Messages : 105 Inscription : sam. 21/juil./2007 15:16
Message
par supercdfr » jeu. 15/nov./2012 14:34
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)
graph100
Messages : 1318 Inscription : sam. 21/mai/2005 17:50
Message
par graph100 » jeu. 15/nov./2012 16:15
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
_________________________________________________
Mon site :
Cerise Code (Attention Chantier perpétuel
)
GallyHC
Messages : 1708 Inscription : lun. 17/déc./2007 12:44
Message
par GallyHC » jeu. 15/nov./2012 17:17
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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
graph100
Messages : 1318 Inscription : sam. 21/mai/2005 17:50
Message
par graph100 » jeu. 15/nov./2012 17:59
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.
_________________________________________________
Mon site :
Cerise Code (Attention Chantier perpétuel
)
GallyHC
Messages : 1708 Inscription : lun. 17/déc./2007 12:44
Message
par GallyHC » jeu. 15/nov./2012 18:22
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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
supercdfr
Messages : 105 Inscription : sam. 21/juil./2007 15:16
Message
par supercdfr » ven. 16/nov./2012 12:18
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.
graph100
Messages : 1318 Inscription : sam. 21/mai/2005 17:50
Message
par graph100 » sam. 17/nov./2012 2:53
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
_________________________________________________
Mon site :
Cerise Code (Attention Chantier perpétuel
)