Ermöglicht/Lässt einen eingehenden Verbindungsversuch auf einem "Socket" zu.
TCPAccept ( mainsocket )
mainsocket | Die Kennung des Haupt-Sockets (SocketID), wie von TCPListen zurückgegeben. |
Erfolg: | Die verbundene "Socket"-Kennung. |
Fehler: | -1 und setzt das @error Flag auf ungleich null |
@error: | -2 nicht verbunden. Windows API WSAGetLastError Rückgabewerte (siehe MSDN). |
TCPCloseSocket, TCPListen, TCPRecv, TCPStartup, TCPTimeout (Option)
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
; Ich bin der Server, starte mich zuerst! (Startet danach das TCPConnect Beispielscript).
Example()
Func Example()
TCPStartup() ; Startet den TCP Service.
; Registriert OnAutoItExit um es aufzurufen, wenn das Script beendet wird.
OnAutoItExitRegister("OnAutoItExit")
; Weist lokalen Variablen die loopback IP-Adresse (localhost) und den Port zu.
Local $sIPAddress = "127.0.0.1" ; Diese IP-Adresse funktioniert nur am eigenen Computer.
Local $iPort = 65432 ; Port welcher für die Verbindung verwendet wird.
; Bindet das Script an die IP-Adresse und zum Port mit einer maximalen Anzahl von 100 anstehenden Verbindungen.
; (Siehe das Beispiel für diese Funktion für weitere Details).
Local $iListenSocket = TCPListen($sIPAddress, $iPort, 100)
Local $iError = 0
; Wenn ein Fehler aufgetaucht ist, so wird dieser angezeigt und False zurückgegeben.
If @error Then
; Vielleicht lauscht bereits jemand auf dieser IP-Adresse und dem Port (läuft das Script bereits?).
$iError = @error
MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), "", "Es konnte nicht gelauscht werden, Error Code: " & $iError)
Return False
EndIf
; Initialisiert eine lokale Variable um sie als Clientsocket zu nutzen.
Local $iSocket = 0
Do ; Wartet solange bis sich jemand verbindet (Unbegrenzt).
; Akzeptiert eingehende Verbindungen sofern präsent (Socket wird geschlossen wenn die Aufgabe abgeschlossen wurde; Ein Socket pro Client).
$iSocket = TCPAccept($iListenSocket)
; Wenn ein Fehler aufgetaucht ist, so wird dieser angezeigt und False zurückgegeben.
If @error Then
$iError = @error
MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), "", "Die eingehende Verbindung wurde nicht akzeptiert, Error Code: " & $iError)
Return False
EndIf
Until $iSocket <> -1 ; Sollte sich dieser Wert von -1 unterscheiden so hat sich ein Client erfolgreich verbunden.
; Schließt den gebundenen Socket damit er von anderen Anwendungen gebunden werden kann.
TCPCloseSocket($iListenSocket)
MsgBox($MB_SYSTEMMODAL, "", "Client hat sich erfolgreich verbunden.")
; Schließt den Socket.
TCPCloseSocket($iSocket)
EndFunc ;==>Example
Func OnAutoItExit()
TCPShutdown() ; Schließt den TCP Service.
EndFunc ;==>OnAutoItExit
#include <MsgBoxConstants.au3>
#include <WinAPIError.au3>
; Note: Check the Example 1 to get the useful comments, this example only demonstrates the SocketToIP user-defined function.
; I am the server, start me first! (Start in second the TCPConnect example script).
Example()
Func Example()
Local $sMsgBoxTitle = "AutoItVersion = " & @AutoItVersion
TCPStartup()
OnAutoItExitRegister("OnAutoItExit")
Local $sIPAddress = "127.0.0.1"
Local $iPort = 65432
Local $iListenSocket = TCPListen($sIPAddress, $iPort, 100)
If @error Then
MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), $sMsgBoxTitle, "Could not listen, Error code: " & @error & @CRLF & @CRLF & _WinAPI_GetErrorMessage(@error))
Return False
EndIf
Local $iSocket = 0
Do
$iSocket = TCPAccept($iListenSocket)
If @error Then
MsgBox(($MB_ICONERROR + $MB_SYSTEMMODAL), $sMsgBoxTitle, "Could not accept the incoming connection, Error code: " & @error & @CRLF & @CRLF & _WinAPI_GetErrorMessage(@error))
Return False
EndIf
Until $iSocket <> -1
TCPCloseSocket($iListenSocket)
; Retrieve the IP Address associated with the accepted socket and assign it to a Local variable.
Local $sClientIPAddress = SocketToIP($iSocket)
; Note: The above function does NOT work with the Listen socket, you can also use it with the socket returned by the TCPConnect function.
; Display the sucessful message with the client IP Address.
MsgBox($MB_SYSTEMMODAL, $sMsgBoxTitle, "Client Connected, IP Address: " & $sClientIPAddress, 3)
TCPCloseSocket($iSocket)
EndFunc ;==>Example
Func SocketToIP($iSocket)
Local $tSockAddr = 0, $aRet = 0
$tSockAddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $iSocket, "struct*", $tSockAddr, "int*", DllStructGetSize($tSockAddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($tSockAddr, 3))
If Not @error Then Return $aRet[0]
EndIf
Return 0
EndFunc ;==>SocketToIP
Func OnAutoItExit()
TCPShutdown() ; Close the TCP service.
EndFunc ;==>OnAutoItExit