This article demonstrates how to get the HostAddress of a
machine using Windows Sockets. The TCP/IP network protocol is shipped with all
Windows operating systems and is becoming increasingly more important with its
Internet compatibility. There is an API set for Windows Sockets that can work
with TCP/IP and help to return information such as the HostName or the IP
Address of a machine. This is obviously reliant on the presence of the relevant
DNS or WINS servers and the TCP/IP protocol being installed. Below is a sample
showing how to extract the machine HostAddress.
The following file is available for
download from the Microsoft Download Center:
Winsock.exe
(http://download.microsoft.com/download/vb50ent/sample45/1/w9xnt4/en-us/winsock.exe)
For
additional information about how to download Microsoft Support files, click the
following article number to view the article in the Microsoft Knowledge Base:
119591
(http://support.microsoft.com/kb/119591/EN-US/
)
How to Obtain Microsoft Support Files from Online Services
Microsoft scanned this file for viruses. Microsoft used the most
current virus-detection software that was available on the date that the file
was posted. The file is stored on security-enhanced servers that help to
prevent any unauthorized changes to the file.
NOTE: This code requires at least version 1.1 of Windows
Sockets.
- Start a new project in Visual Basic. Form1 is created by
default.
- Place a CommandButton on the form.
- Add the following code to the Form1 code window:
Option Explicit
Private Const WSADescription_Len = 256
Private Const WSASYS_Status_Len = 128
Private Const SOCKET_ERROR As Long = -1
Private Type WSADATA
wversion As Integer
wHighVersion As Integer
szDescription(0 To WSADescription_Len) As Byte
szSystemStatus(0 To WSASYS_Status_Len) As Byte
iMaxSockets As Integer
iMaxUdpDg As Integer
lpszVendorInfo As Long
End Type
Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, _
ByVal HostLen As Integer) As Long
Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" _
() As Long
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
wVersionRequired as Integer, lpWSAData As WSADATA) As Long
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
Sub Form_Load()
Call SocketsInitialize
End Sub
Private Sub Command1_click()
Dim hostname$, HostLen&
HostLen& = 256
hostname$ = Space$(HostLen&)
If gethostname(hostname$, HostLen&) = SOCKET_ERROR Then
MsgBox "Windows Sockets error" & Str(WSAGetLastError())
Else
hostname$ = Trim$(hostname$)
hostname$ = Left$(hostname$, Len(hostname$) - 1)
MsgBox "Host name = " & hostname$
End If
SocketsCleanup
End Sub
Sub SocketsInitialize()
Const WS_VERSION_REQD As Integer = &H101
Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
Const MIN_SOCKETS_REQD = 1
Dim WSAD As WSADATA
Dim iReturn As Integer
Dim sLowByte As String, sHighByte As String, sMsg As String
iReturn = WSAStartup(WS_VERSION_REQD, WSAD)
If iReturn <> 0 Then
MsgBox "Winsock.dll is not responding."
End
End If
If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte _
(WSAD.wversion) = WS_VERSION_MAJOR And hibyte(WSAD.wversion) _
< WS_VERSION_MINOR) Then
sHighByte = Trim$(Str$(hibyte(WSAD.wversion)))
sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))
sMsg = "Windows Sockets version " & sLowByte & "." & sHighByte
sMsg = sMsg & " is not supported by winsock.dll "
MsgBox sMsg:
End
End If
If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
sMsg = "This application requires a minimum of "
sMsg = sMsg & Trim$(Str$(MIN_SOCKETS_REQD)) & _
" supported sockets."
MsgBox sMsg
End
End If
End Sub
Function hibyte(ByVal wParam As Integer)
hibyte = wParam \ &H100 And &HFF&
End Function
Function lobyte(ByVal wParam As Integer)
lobyte = wParam And &HFF&
End Function
Sub SocketsCleanup()
Dim lReturn As Long
lReturn = WSACleanup()
If lReturn <> 0 Then
MsgBox "Socket error " & Trim$(Str$(lReturn)) & _
" occurred in Cleanup"
End
End If
End Sub
- Press the F5 key to run the project. The Hostname should be
printed on the form.