reponse a un ping sans pointeur

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

reponse a un ping sans pointeur

Message 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)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: reponse a un ping sans pointeur

Message 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
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: reponse a un ping sans pointeur

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: reponse a un ping sans pointeur

Message 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.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: reponse a un ping sans pointeur

Message 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
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

Re: reponse a un ping sans pointeur

Message par supercdfr »

J’espérais pas tant de réponse :D

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.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: reponse a un ping sans pointeur

Message 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 :D
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre