Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Get local ip
Message
De
16/03/2004 10:35:36
 
 
À
11/03/2004 11:46:19
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Titre:
Divers
Thread ID:
00885258
Message ID:
00886689
Vues:
17
Try with this...... WithOut COM/OCX

Regards.-

-------------------------------------------------------------------------------------
SET PROCEDURE TO GetIP.prg
oo = CREATEOBJECT("GetIP")
a = oo.GetLocalHostName()
b = oo.GetHostIP( a )
? "Local Host:", a
? "Local IP:", b

DEFINE CLASS GetIP AS CUSTOM

NAME = "GetIP"

PROCEDURE Init
DECLARE INTEGER WSAStartup IN ws2_32 INTEGER wVerRq, STRING @lpWSAData
DECLARE INTEGER WSACleanup IN ws2_32
DECLARE INTEGER gethostbyname IN ws2_32 STRING hostname

DECLARE INTEGER gethostname IN ws2_32;
STRING @name, INTEGER namelen

DECLARE RtlMoveMemory IN kernel32 As Heap2Str;
STRING @Dest, INTEGER Src, INTEGER nLength
ENDPROC

PROCEDURE GetLocalHostName
*|-- returns the standard host name for the local machine
#DEFINE SOCKET_ERROR -1
LOCAL lcBuffer, lnResult
lcBuffer = SPACE(250)
lnResult = gethostname (@lcBuffer, Len(lcBuffer))
RETURN Iif(lnResult=0, SUBSTR(lcBuffer, 1,AT(Chr(0),lcBuffer)-1), "")
ENDPROC

FUNCTION GetHostIP (lcHostname)
#DEFINE HOSTENT_SIZE 16
LOCAL lcHOSTENTptr, lcHOSTENT, lnAddrlistPtr

*|-- address for the HOSTENT structure
lcHOSTENTptr = gethostbyname(lcHostname)

IF lcHOSTENTptr <> 0
lcHOSTENT = This.GetMemBuf( lcHOSTENTptr, HOSTENT_SIZE )
*|-- a pointer to a null-terminated list of addresses
lnAddrlistPtr = This.buf2dword(SUBSTR(lcHOSTENT, 13,4))
RETURN This.GetIPfromHOSTENT(lnAddrlistPtr)
ENDIF
RETURN ""
ENDPROC


PROCEDURE GetIPfromHOSTENT (lnAddrlistPtr)
*|-- retrieving IP address from the HOSTENT structure
LOCAL lnDataAddress, lcResult
lnDataAddress = This.buf2dword( This.GetMemBuf( lnAddrlistPtr, 4 ) )
RETURN IIF( lnDataAddress <> 0, This.GetIPAddress( This.GetMemBuf( lnDataAddress, 4 ) ), "" )
ENDPROC

FUNCTION GetIPAddress (lcAddrBuf)
*|-- converts 4-characters string buffer
*|-- to the IP address string representation
LOCAL lcResult, ii
lcResult = ""
FOR ii=1 TO 4
lcResult = lcResult +;
LTRIM(STR(Asc(SUBSTR(lcAddrBuf, ii,1)))) +;
Iif(ii=4, "",".")
ENDFOR
RETURN lcResult
ENDPROC

PROCEDURE buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
Asc(SUBSTR(lcBuffer, 4,1)) * 16777216
ENDPROC

PROCEDURE GetMemBuf (lnAddr, lnBufsize)
LOCAL lcBuffer
lcBuffer = REPLICATE(Chr(0), lnBufsize)
Heap2Str( @lcBuffer, lnAddr, lnBufsize )
RETURN lcBuffer
ENDPROC


ENDDEFINE
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform