Petrus Vorster posted a question that he has deleted while I was doing some research. It was about retrieving the local IP address of a computer.
In FreeBasic, you can do this:
DIM wsad AS WSAData
IF WSAStartup(&h202, @wsad) = 0 THEN
DIM hostname AS ZSTRING * 256
IF gethostname(hostname, SIZEOF(hostname)) = 0 THEN
DIM pHostent AS HOSTENT PTR = gethostbyname(hostname)
IF pHostent THEN
DIM IPbuffer AS ZSTRING PTR = inet_ntoa(*CAST(IN_ADDR PTR, pHostent->h_addr_list[0]))
print "Local IP host address: "; *IPbuffer
END IF
END IF
WSACleanUp
END IF
Hola José,
Also, this might be of some value, since GetHostByName is deprecated and MS insist on using GetAddrInfo...
#Define JumpCompiler "<D:\Free\64\fbc.exe>"
#Define JumpCompilerCmd "<-s gui -w pedantic "D:\Free\bas\~~Default.rc">"
#define UniCode
#Include Once "windows.bi"
#Include Once "win\winsock2.bi"
#Include Once "win\ws2tcpip.bi"
'_____________________________________________________________________________
DIM wsad AS WSAData
IF WSAStartup(&h202, @wsad) = ERROR_SUCCESS THEN
DIM zHostName AS ZSTRING * 256
IF gethostname(zHostName, SIZEOF(zHostName)) = ERROR_SUCCESS THEN
'zHostName = "localhost" 'Will return 127.0.0.1
'zHostName = "microsoft.com" 'In a loop, will return 40.113.200.201, 104.215.148.63, 13.77.161.179, 40.76.4.15, 40.112.72.205
DIM pAddressInfoList AS ADDRINFOW POINTER
DIM AddressInfoHint AS ADDRINFOW
AddressInfoHint.ai_family = AF_INET
AddressInfoHint.ai_socktype = SOCK_STREAM
AddressInfoHint.ai_protocol = IPPROTO_TCP
IF GetAddrInfo(zHostName, "http", @AddressInfoHint, @pAddressInfoList) = ERROR_SUCCESS THEN
DO 'REM to get only the first assigned ip
DIM pSockAddrIn AS PSOCKADDR_IN = Cast(PSOCKADDR_IN, pAddressInfoList->ai_addr)
DIM IPbuffer AS ZSTRING PTR = inet_ntoa(*CAST(IN_ADDR POINTER, @pSockAddrIn->sin_addr.s_addr))
MessageBox(HWND_DESKTOP, "Local IP host address: " & *IPbuffer, zHostName, MB_OK OR MB_TOPMOST)
IF pAddressInfoList->ai_next = 0 THEN EXIT DO 'REM to get only the first assigned ip
pAddressInfoList = Cast(ADDRINFOW POINTER, pAddressInfoList->ai_next) 'REM to get only the first assigned ip
LOOP 'REM to get only the first assigned ip
FreeAddrInfo(pAddressInfoList) 'Free address list memory
END IF
'MS: GetHostByName is deprecated. Developers creating Windows Sockets 2 applications
' are urged to use the GetAddrInfo function instead of GetHostByName.
'DIM pHostent AS HOSTENT PTR = GetHostByName(zHostName)
'IF pHostent THEN
' DIM IPbuffer AS ZSTRING PTR = inet_ntoa(*CAST(IN_ADDR POINTER, pHostent->h_addr_list[0]))
' MessageBox(HWND_DESKTOP, "Local IP host address: " & *IPbuffer, zHostName, MB_OK OR MB_TOPMOST)
'END IF
END IF
WSACleanUp()
END IF
'_____________________________________________________________________________
'
A note to say that I'm not usually really worried about api going removed.
A lot are deprecated, even since the end of the 90s and are still alive.
I think that it is Raymond Chen who said that Microsoft is really conservative on this aspect,
because, from experience, api removal produce too many complaints around the globe...
This said, this is the rare use of imperative words Microsoft used made me a little afraid.
> Developers creating Windows Sockets 2 applications are urged to use the getaddrinfo function instead of gethostbyname.
Hi Guys
Yes, I actually found the answer in some older files i had, felts stupid, and removed the post.
Thank you for always coming up with help and advice!
-regards Peter