Nasıl yapılır: Windows Sockets kullanarak ana bilgisayar IP adresi al

Makale çevirileri Makale çevirileri
Makale numarası: 160215 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, Windows Sockets dll dosyasının, Wsock32.dll, GetHostByName API kullanarak, yerel makinenin IP adresini ana bilgisayar elde gösterilmiştir. Ana bilgisayar IP adresi edinmek için GetHostByName GetHostName birlikte kullanmanız gerekir.

Daha fazla bilgi

GetHostName yerel makinedeki standart ana bilgisayar adını döndürür. GetHostByName, bu adı çözümlemesi ve bir işaretçi HOSTENT yapısına dönmek için kullanabilirsiniz. Bu yapı, ana bilgisayar adresi bilgilerini içerir.

Adım adım örnek

  1. Yeni bir proje için Visual Basic'te başlatın. Varsayılan olarak, Form1 oluşturulur.
  2. Command1, KomutDüğmesi Form1'ın getirin.
  3. Aşağıdaki kod, Form1 genel Declarations bölümünde yerleştirin:

       Private Const WS_VERSION_REQD = &H101
       Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
       Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
       Private Const MIN_SOCKETS_REQD = 1
       Private Const SOCKET_ERROR = -1
       Private Const WSADescription_Len = 256
       Private Const WSASYS_Status_Len = 128
    
       Private Type HOSTENT
           hName As Long
           hAliases As Long
           hAddrType As Integer
           hLength As Integer
           hAddrList As Long
       End Type
    
       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 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
       
       Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal hostname$, _
       ByVal HostLen as Long) as long
       Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal _
       hostname$) As Long
       Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal _
       hpvSource&, ByVal cbCopy&)
    
       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 SocketsInitialize()
       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
    
           'iMaxSockets is not used in winsock 2. So the following check is only
           'necessary for winsock 1. If winsock 2 is requested,
           'the following check can be skipped.
    
           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
    
       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
    
       Sub Form_Load()
    
           SocketsInitialize
    
       End Sub
    
       Private Sub Form_Unload(Cancel As Integer)
    
           SocketsCleanup
    
       End Sub
    
       Private Sub Command1_click()
       Dim hostname As String * 256
       Dim hostent_addr As Long
       Dim host As HOSTENT
       Dim hostip_addr As Long
       Dim temp_ip_address() As Byte
       Dim i As Integer
       Dim ip_address As String
    
           If gethostname(hostname, 256) = SOCKET_ERROR Then
               MsgBox "Windows Sockets error " & Str(WSAGetLastError())
               Exit Sub
           Else
               hostname = Trim$(hostname)
           End If
    
           hostent_addr = gethostbyname(hostname)
    
           If hostent_addr = 0 Then
               MsgBox "Winsock.dll is not responding."
               Exit Sub
           End If
    
           RtlMoveMemory host, hostent_addr, LenB(host)
           RtlMoveMemory hostip_addr, host.hAddrList, 4
    
           MsgBox hostname
    
           'get all of the IP address if machine is  multi-homed
    
           Do
               ReDim temp_ip_address(1 To host.hLength)
               RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength
    
               For i = 1 To host.hLength
                   ip_address = ip_address & temp_ip_address(i) & "."
               Next
               ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)
    
               MsgBox ip_address
    
               ip_address = ""
               host.hAddrList = host.hAddrList + LenB(host.hAddrList)
               RtlMoveMemory hostip_addr, host.hAddrList, 4
            Loop While (hostip_addr <> 0)
    
       End Sub
    						
  4. Proje çalıştırmak için F5 tuşuna basın.
  5. Command1 ana bilgisayar bilgileri elde etmek için Ek Yardım düğmesini tıklatın.

Referanslar

Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:

154512 SAMPLE: WINSOCK.EXE: Getting HostAddress Using Windows Sockets

Özellikler

Makale numarası: 160215 - Last Review: 23 Ağustos 2006 Çarşamba - Gözden geçirme: 2.4
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
Anahtar Kelimeler: 
kbmt kbhowto KB160215 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:160215

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com