SAMPLE: Getting HostAddress Using Windows Sockets

Last reviewed: July 14, 1997
Article ID: Q154512
The information in this article applies to:
  • Microsoft Visual Basic Professional and Enterprise Editions for Windows, version 5.0
  • Standard, Professional, and Enterprise Editions of Microsoft Visual Basic, 32-bit only, for Windows, version 4.0

SUMMARY

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 Software Library:

 ~ Winsock.exe (size: 86185 bytes) 

For more information about downloading files from the Microsoft Software Library, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q119591
   TITLE     : How to Obtain Microsoft Support Files from
               Online Services

MORE INFORMATION

NOTE: This code requires at least version 1.1 of Windows Sockets.

  1. Start a new project in Visual Basic. Form1 is created by default.

  2. Place a CommandButton on the form.

  3. 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$, HostLen&) As Long
          Private Declare Function WSAGetLastError Lib "wsock32.dll" _
             () As Long
          Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal _
             wVersionRequired&, 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&
            Hostname$ = Space$(256)
            If gethostname(Hostname$, HostLen&) = SOCKET_ERROR Then
                MsgBox "Windows Sockets error" & Str(WSAGetLastError())
            Else
                Hostname$ = Trim$(Hostname$)
                Hostname$ = Left$(Hostname$, Len(Hostname$) - 1)
                Print "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
    
    

  4. Press the F5 key to run the project. The Hostname should be printed on the form.


Keywords : APrgOther kbsample kbusage vb432 vb4win vb5all vb5howto kbhowto
Version : 4.0 5.0
Platform : WINDOWS
Issue type : kbhowto
Resolution Type : kbfile


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: July 14, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.