¿Cómo mostrar la dirección IP de esta máquina en VB?
Se recomienda utilizar la función API, el siguiente ejemplo completo:
(Puedes llamar directamente a la función GetIPAddress para obtener la IP)
-- ------- ---------
Opción explícita
Const pública MIN_SOCKETS_REQD siempre que = 1
Const pública WS_VERSION_REQD como Largo = amp; H101 p>
Const pública WS_VERSION_MAJOR Mientras = WS_VERSION_REQD \ H100 y HFF Mientras = -1
Const pública ERROR_SUCCESS Mientras = 0
Público Const WSADESCRIPTION_LEN = 257
Const pública WSASYS_STATUS_LEN = 129
Const pública MAX_WSADescription = 256
Const pública MAX_WSASYSStatus = 128
Tipo público WSAData
wVersion como entero
wHighVersion como entero
szDescription(0 a MAX_WSADescription) como byte
szSystemStatus(0 a MAX_WSASYSStatus) como byte
wMaxSockets como entero
wMaxUDPDG como entero
dwVendorInfo como largo
Tipo final
Escriba WSADataInfo p>
wVersion como entero
wHighVersion como entero
szDescription como cadena * WSADESCRIPTION_LEN
szSystemStatus como cadena * WSASYS_STATUS_LEN
iMaxSockets Como entero
iMaxUdpDg como entero
lpVendorInfo como cadena
Tipo final
Tipo público HOSTENT
hName Como Long
hAliases As Long
hAddrType As Integer p>
hL
en Como entero
hAddrList As Long
Tipo de fin
Declarar función WSAStartupInfo Lib "WSOCK32" Alias "WSAStartup" (ByVal wVersionRequested como entero, lpWSADATA como WSADataInfo) Mientras
Declarar Función WSACleanup Lib "WSOCK32" () Mientras
Declarar Función WSAGetLastError Lib "WSOCK32" () Mientras
Declarar Función WSAStartup Lib "WSOCK32" (ByVal wVersionRequired mientras, lpWSADATA como WSAData) mientras
Declarar función gethostname Lib "WSOCK32" (ByVal szHost como cadena, ByVal dwHostLen mientras) mientras
Declarar función gethostbyname Lib "WSOCK32" (ByVal szHost como cadena) mientras sea largo
Declarar sub CopyMemoryIP Lib "kernel32" Alias "RtlMoveMemory" (hpvDest como cualquiera, ByVal hpvSource mientras sea largo, ByVal cbCopy como largo)
'Obtener dirección IP local
Función pública GetIPAddress() como cadena
Dim sHostName As String * 256
Dim lpHost As Long
Atenuar HOST como HOSTENT
Atenuar dwIPAddr mientras
Atenuar tmpIPAddr() como byte
Atenuar I como entero
Atenuar sIPAddr como cadena
Si no es SocketsInitialize() Entonces
GetIPAddress = ""
Salir de la función
Finalizar si
Si gethostname(sHostName, 256) = SOCKET_ERROR Entonces
GetIPAddress = ""
MsgBox "Error de Windows Sockets " & Str$(WSAGetLastError()) & " ha ocurrido. No se puede obtener correctamente el nombre del host."
SocketsCleanup
Salir de la función
Finalizar si
sHostName = Trim$(sHostName)
lpHost = gethostbyname(sHostName)
Si lpHost = 0 Entonces
GetIPAddress = ""
MsgBox "Los sockets de Windows no responden." amp "No se puede obtener correctamente el nombre del host."
SocketsCleanup
Función de salida
Finalizar si
CopyMemoryIP HOST, lpHost, Len(HOST)
CopyMemoryIP dwIPAddr, HOST. hAddrList, 4
ReDim tmpIPAddr(1 To HOST.hLen)
CopyMemoryIP tmpIPAddr(1), dwIPAddr, HOST.hLen
Para I = 1 a HOST .hLen
sIPAddr = sIPAddr amp; tmpIPAddr(I) amp "."
Siguiente
GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) ) - 1)
SocketsCleanup
Función final
Función pública GetIPHostName() como cadena
Dim sHostName como cadena * 256 p>
Si no es SocketsInitialize() Entonces
GetIPHostName = ""
Salir de la función
Finalizar si
Si gethostname( sHostName, 256) = SOCKET_ERROR Entonces
GetIPHostName = ""
MsgBox "Error de Windows Sockets " & Str$(WSAGetLastError()) & " ha ocurrido. No se puede obtener correctamente el nombre del host ."
SocketsCleanup
Salir de la función
Finalizar si
GetIPHostName = Left$(sHostName, InStr(sHostName, Chr( 0) ) - 1)
SocketsClean
up
Función final
Función pública HiByte(ByVal wParam As Integer)
HiByte = wParam \ amp H100 Y amp; p>Función final
Función pública LoByte(ByVal wParam As Integer)
LoByte = wParam Y amp; >Public Sub SocketsCleanup()
Si WSACleanup() lt;gt; ERROR_SUCCESS Entonces
MsgBox "Se produjo un error de socket en la limpieza".
Finalizar si p>
End Sub
Función pública SocketsInitialize() como booleano
Atenuar WSAD como WSAData
Atenuar sLoByte como cadena
Dim sHiByte As String
If WSAStartup(WS_VERSION_REQD, WSAD) lt;gt; ERROR_SUCCESS Then
MsgBox "El socket de Windows de 32 bits no responde."
SocketsInitialize = False
Salir de la función
Finalizar si
Si WSAD.wMaxSockets lt; MIN_SOCKETS_REQD Entonces
MsgBox "Esta aplicación requiere un mínimo de " & CStr(MIN_SOCKETS_REQD) & " sockets admitidos."
SocketsInitialize = False
Función de salida
Finalizar si
If LoByte(WSAD.wVersion) lt; WS_VERSION_MAJOR O (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR Y HiByte(WSAD.wVersion) lt; WS_VERSION_MINOR) Entonces
sHiByte = CStr(HiByte(WSAD.wVersion) )
sLoByte = CStr(LoByte(WSAD.wVersion))
MsgBox "Versión de sockets " amp;
e amp; "no es compatible con Windows Sockets de 32 bits."
SocketsInitialize = False
Función de salida
Finalizar si
SocketsInitialize = True
Función final