API File Search
Filedialogs
The FILES statement
The FILES statement in action
Open Source Editor for WinXP
Spotlight on John Fisher
Using Winsock
Winsock API Reference
- USED BY PERMISSION
- FOR LIBERTY BASIC 3
' IP Getter using Winsock ' Based on code at http://www.vbapi.com/ref/g/gethostbyname.html. ' By Brent Thorn, March 2002 ' mailto:lbgui@aol.com
Titlebar "IP Getter"
Open "Kernel32" For DLL As #kernel Open "WSock32" For DLL As #wsock
Domain$ = "www.yahoo.com" Prompt "Enter an Internet domain."; Domain$
If Domain$ <> "" Then Struct sockinfo, _ wVersion As word, _ wHighVersion As word, _ szDescription As char[257], _ szSystemStatus As char[129], _ iMaxSockets As long, _ iMaxUdpDg As long, _ lpVenderInfo As long Struct hostinfo, _ hname As long, _ haliases As long, _ haddrtype As word, _ hlength As word, _ haddrlist As long Struct sIPAddress, _ number As ulong
' Open up a Winsock session, using version 2.2. wVersionRequested = MAKEWORD(2, 2) CallDLL #wsock, "WSAStartup",_ wVersionRequested As word,_ sockinfo As struct, result As long
If retval <> 0 Then Print "ERROR: Attempt to open Winsock failed: error"; retval GoTo [End] End If
' Get information about the domain specified in Domain$. pHostInfo = gethostbyname(Domain$)
If pHostInfo = 0 Then Print "Unable to resolve domain name." Else ' Copy the data into a HOSTENT structure. length = Len(hostinfo.struct) CallDLL #kernel, "RtlMoveMemory",_ hostinfo As struct, pHostInfo As ulong,_ length As ulong, result As void
If hostinfo.haddrtype.struct <> 2 Then Print "A non-IP address was returned." Else ' Copy the pointer to the first (and probably only) ' IP address in the structure. source = hostinfo.haddrlist.struct CallDLL #kernel, "RtlMoveMemory",_ sIPAddress As struct, source As ulong,_ 4 As ulong, result As void
' Copy the actual IP address. source = sIPAddress.number.struct CallDLL #kernel, "RtlMoveMemory",_ sIPAddress As struct, source As ulong,_ 4 As ulong, result As void
' Convert the IP address into a human-readable string. ipAddress = sIPAddress.number.struct pIPString = inet.ntoa(ipAddress)
' Copy the result into a string variable. ipString$ = WinString(pIPString)
' Print the result: a human-readable IP address. Print ipString$ End If End If
retval = WSACleanup() End If
[End] Close #kernel Close #wsock
End
'*** Winsock Wrapper Functions ***
Function WSACleanup() CallDLL #wsock, "WSACleanup",_ WSACleanup As long End Function
Function gethostbyname( name$ ) CallDLL #wsock, "gethostbyname",_ name$ As ptr, gethostbyname As long End Function
Function inet.ntoa( inaddr ) CallDLL #wsock, "inet_ntoa",_ inaddr As long, inet.ntoa As long End Function
'*** General-purpose Routines ***
'Make a word from two bytes (0 to 255). Function MAKEWORD( bLow, bHigh ) MAKEWORD = bLow + 256 * bHigh End Function