Option Compare Database ' Fügen sie diesen Code in ein öffentliches Modul ein Private Declare Function gethostbyname Lib "wsock32.dll" ( _ ByVal Name As String) As Long Private Declare Function socket Lib "wsock32.dll" ( _ ByVal af As Long, _ ByVal prototype As Long, _ ByVal protocol As Long) As Long Private Declare Function closesocket Lib "wsock32.dll" (ByVal s As Long) As Long Private Declare Function connect Lib "wsock32.dll" ( _ ByVal s As Long, _ Name As SOCKADDR, _ ByVal namelen As Long) As Long Private Declare Function send Lib "wsock32.dll" ( _ ByVal s As Long, _ buf As Any, _ ByVal length As Long, _ ByVal flags As Long) As Long Private Declare Function recv Lib "wsock32.dll" ( _ ByVal s As Long, _ buf As Any, _ ByVal length As Long, _ ByVal flags As Long) As Long Private Declare Function ioctlsocket Lib "wsock32.dll" ( _ ByVal s As Long, _ ByVal cmd As Long, _ argp As Long) As Long Private Declare Function inet_addr Lib "wsock32.dll" ( _ ByVal cp As String) As Long Private Declare Function htons Lib "wsock32.dll" ( _ ByVal hostshort As Integer) As Integer Private Declare Function WSAGetLastError Lib "wsock32.dll" () As Long Private Declare Sub MoveMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal length As Long) Private Declare Function WSAStartup Lib "wsock32.dll" ( _ ByVal wVersionRequested As Integer, _ lpWSAData As WSAData) As Long Private Declare Function WSACleanup Lib "wsock32.dll" () As Long Private Type HOSTENT hname As Long haliases As Long haddrtype As Integer hlength As Integer haddrlist As Long End Type Private Type SOCKADDR sin_family As Integer sin_port As Integer sin_addr As Long sin_zero As String * 8 End Type Private Type WSAData wVersion As Integer wHighVersion As Integer szDescription As String * 257 szSystemStatus As String * 129 iMaxSockets As Long iMaxUdpDg As Long lpVendorInfo As Long End Type ' eine der HOSTENT-haddrtype-Konstanten Private Const AF_INET = 2 ' Internet Protokoll (UDP/IP oder TCP/IP). ' socket prototype-Konstanten Private Const SOCK_STREAM = 1 ' 2-wege Stream. Bei AF_INET ist es das ' TCP/IP Protokoll Private Const SOCK_DGRAM = 2 ' Datagramm Basierende verbindung. Bei AF_INET ' ist es das UDP Protokoll ' recv flags-Konstanten Private Const MSG_PEEK = &H2 ' Daten aus dem Puffer lesen, aber nicht aus ' dem Puffer entfernen ' ioctlsocket cmd-Konstanten Private Const FIONBIO = &H8004667E ' Setzen ob die Funktion bei der nächsten ' Datenanfrage zurückkehren soll Dim hSock As Long ' IP-Adresse einer Internetadresse ermitteln Public Function GetIP(ByVal HostName As String) As String Dim pHost As Long, HostInfo As HOSTENT Dim pIP As Long, IPArray(3) As Byte ' Informationen des Host ermitteln pHost = gethostbyname(HostName) If pHost = 0 Then Exit Function ' HOSTENT-Struktur kopieren MoveMemory HostInfo, ByVal pHost, Len(HostInfo) ' Pointer der 1ten Ip-Adresse ermitteln ReDim IpAddress(HostInfo.hlength - 1) MoveMemory pIP, ByVal HostInfo.haddrlist, 4 MoveMemory IPArray(0), ByVal pIP, 4 GetIP = IPArray(0) & "." & IPArray(1) & "." & IPArray(2) & "." & IPArray(3) End Function ' Mit einem Server verbinden Public Function ConnectToServer(ByVal ServerIP As String, ByVal ServerPort _ As Long) As Long Dim Retval As Long, ServerAddr As SOCKADDR ' Socket erstellen hSock = socket(AF_INET, SOCK_STREAM, 0&) If hSock = -1 Then ConnectToServer = -1 Exit Function End If ' mit dem Server verbinden With ServerAddr .sin_addr = inet_addr(ServerIP) .sin_port = htons(ServerPort) .sin_family = AF_INET End With Retval = connect(hSock, ServerAddr, Len(ServerAddr)) If Retval < 0 Then MsgBox ("Connection Error:" + Retval) Call closesocket(hSock) ConnectToServer = -1 Exit Function End If ' Rückkehren der Funktion nach dem Abfragen von ankommenden Daten erzwingen Retval = ioctlsocket(hSock, FIONBIO, 1&) ' Socket-ID zurückgeben ConnectToServer = hSock End Function ' Sock/Verbindung schließen Public Function Disconnect(ByRef Sock As Long) Call closesocket(hSock) Sock = 0 End Function ' Daten senden Public Function SendData(ByVal Data As String) As Long SendData = send(hSock, ByVal Data, Len(Data), 0&) End Function ' Sind Daten angekommen ? Public Function DataComeIn() As Long Dim Tmpstr As String * 1 DataComeIn = recv(hSock, ByVal Tmpstr, Len(Tmpstr), MSG_PEEK) If DataComeIn = -1 Then DataComeIn = WSAGetLastError() End If End Function ' Daten ermitteln Public Function GetData() As String Dim Tmpstr As String * 4096, Retval As Long Retval = recv(hSock, ByVal Tmpstr, Len(Tmpstr), 0&) GetData = Left$(Tmpstr, Retval) End Function ' Fügen Sie diesen Code in eine Form mit einem Command-Button und einem ' Textfeld ein Public Function StartWinSocket() As Long Dim Retval As Long, WSD As WSAData Retval = WSAStartup(&H202, WSD) If Retval < 0 Then StartWinSocket = -1 End If StartWinSocket = 0 End Function Public Sub EndWinSocket() Call Disconnect(hSock) Call WSACleanup End Sub Public Function ReceiveString(length) As String Dim resultString As String While Len(resultString) < length While DataComeIn() = 0 DoEvents Wend resultString = resultString + GetData() Wend ReceiveString = resultString End Function