Hallo
folgender Code ist die "Übersetzung" von getnameinfo nach VB - hoffe ich
Option Explicit
Private Const NI_MAXHOST = 1025
Private Const NI_MAXSERV = 32
Private Const AF_INET = 2 ' internetwork: UDP, TCP, etc.
Private Const WS_VERSION_REQD As Long = &H202
Private Const MAX_WSADescription = 256
Private Const MAX_WSASYSStatus = 128
Private Type WSADATA
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Integer
wMaxUDPDG As Integer
dwVendorInfo As Long
End Type
Private Type sockaddr_in
sin_family As Integer
sin_port As Integer
sin_addr As Long
sin_zero(1 To 8) As Byte
End Type
Private Const NI_NOFQDN = &H1& ' Only return nodename portion for local
' hosts
Private Const NI_NUMERICHOST = &H2& ' Return numeric form of the host's _
address */
Private Const NI_NAMEREQD = &H4& ' Error if the host's name not in DNS */
Private Const NI_NUMERICSERV = &H8& ' Return numeric form of the service (
' port #) */
Private Const NI_DGRAM = &H10& ' Service is a datagram service */
Private Declare Function getnameinfo Lib "Ws2_32" (ByRef sa As sockaddr_in, _
ByVal salen As Long, ByVal Host As String, ByVal hostlen As Long, ByVal serv _
As String, ByVal servlen As Long, ByVal flags As Long) As Long
Private Declare Function Ipv4ToLong Lib "ws2_32.dll" Alias "inet_addr" (ByVal _
cp As String) As Long
Private Declare Function htons Lib "ws2_32.dll" (ByVal hostshort As Integer) As _
Integer
Private Declare Function WSAStartup Lib "wsock32.dll" (ByVal wVersionRequired _
As Long, lpWSADATA As WSADATA) As Long
Private Declare Function WSACleanup Lib "wsock32.dll" () As Long
Private Declare Function WSAGetLastError Lib "wsock32.dll" () As Long
Public Function VB_getnameinfo(IP As String, Port As Long, HostName As String, _
ServiceName As String) As Long
' Declare and initialize variables
Dim sa As sockaddr_in
Dim RetCode As Long
Dim Host As String * NI_MAXHOST
Dim Service As String * NI_MAXSERV
Dim WSAD As WSADATA
RetCode = WSAStartup(WS_VERSION_REQD, WSAD)
If RetCode <> 0 Then
VB_getnameinfo = False
Exit Function
End If
' -----------------------------------------
' Set up sockaddr_in structure which is passedto the getnameinfo function
sa.sin_family = AF_INET
sa.sin_addr = Ipv4ToLong(IP)
sa.sin_port = htons(Port)
' -----------------------------------------
' Call getnameinfo
RetCode = getnameinfo(sa, Len(sa), Host, Len(Host), vbNull, 0, NI_NUMERICSERV)
If RetCode = 0 Then
HostName = Left$(Host, InStr(1, Host, Chr(0)) - 1)
ServiceName = Left$(Service, InStr(1, Host, Chr(0)) - 1)
End If
WSACleanup
VB_getnameinfo = RetCode
End Function Ich hoffe, der Code hilft Dir weiter ...!
Gruß
Stefan |