Permet les connexions entrantes sur un socket.
TCPAccept ( mainsocket )
mainsocket | L'identifiant du socket principal (SocketID) tel que retourné par un appel à la fonction TCPListen. |
Succès: | Retourne l'identifiant du socket connecté. |
Échec: | Retourne -1 et définit @error <> 0. |
@error: | Valeur de retour de l'API windows WSAGetError (Consultez MSDN). |
TCPCloseSocket, TCPListen, TCPRecv, TCPStartup, TCPTimeout (Option)
#include <MsgBoxConstants.au3> ; Je suis le serveur, démarrez-moi d'abord! (Démarrez ensuite l'exemple de script TCPConnect). Example() Func Example() TCPStartup() ; Démarre le service TCP. ; Enregistre OnAutoItExit qui sera appelé lorsque le script se fermera. OnAutoItExitRegister("OnAutoItExit") ; Affecte des variables locales avec l'adresse IP et le port. Local $sIPAddress = "127.0.0.1" ; Cette adresse IP ne fonctionne que pour les tests sur votre propre ordinateur. Local $iPort = 65432 ; Port utilisé pour la connexion. ; Se connecte à l'adresse IP sur le port spécifié avec un maximum de 100 connexions en attente ; Consultez l'exemple de cette fonction pour plus de détails). Local $iListenSocket = TCPListen($sIPAddress, $iPort, 100) Local $iError = 0 ; Si une erreur s'est produite affiche le code d'erreur et retourne False. If @error Then ; Quelqu'un est probablement déjà à l'écoute sur cette adresse IP et ce port (scénario déjà en cours?). $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Ecoute impossible, code d'erreur: " & $iError) Return False EndIf ; Affecte la variable locale pour l'écoute et le socket client. Local $iSocket = 0 Do ; Attend que quelqu'un se connecte (illimité). ;Accepte les connexions entrantes si présent (Socket pour fermer une fois terminé, un socket par client). $iSocket = TCPAccept($iListenSocket) ; Si une erreur s'est produite affiche le code d'erreur et retourne False. If @error Then $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Tentative de connexion refusé, code de l'erreur: " & $iError) Return False EndIf Until $iSocket <> -1 ; si $iSocket est différent de -1 un client est connecté. ; Ferme le socket d'écoute pour permettre d'autres connexions par la suite. TCPCloseSocket($iListenSocket) MsgBox($MB_SYSTEMMODAL, "", "Client connecté.") ; Ferme le socket. TCPCloseSocket($iSocket) EndFunc ;==>Example Func OnAutoItExit() TCPShutdown() ; Ferme le service TCP. EndFunc ;==>OnAutoItExit
#include <MsgBoxConstants.au3> ; Remarque: Consultez l'exemple 1 pour obtenir les commentaires utiles, cet exemple montre la fonction définie par l'utilisateur SocketToIP. ; Je suis le serveur, démarrez-moi d'abord! (Démarrez ensuite l'exemple de script TCPConnect). Example() Func Example() TCPStartup() OnAutoItExitRegister("OnAutoItExit") Local $sIPAddress = "127.0.0.1" Local $iPort = 65432 Local $iListenSocket = TCPListen($sIPAddress, $iPort, 100) Local $iError = 0 If @error Then $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Ecoute impossible, code d'erreur: " & $iError) Return False EndIf Local $iSocket = 0 Do $iSocket = TCPAccept($iListenSocket) If @error Then $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Refus de la tentative de connexion, code d'erreur: " & $iError) Return False EndIf Until $iSocket <> -1 TCPCloseSocket($iListenSocket) ; Récupére l'adresse IP associée au socket acceptée et l'assigne à une variable locale. Local $sClientIPAddress = SocketToIP($iSocket) ; Remarque: La fonction ci-dessus ne fonctionne pas avec le socket Listen, vous pouvez également l'utiliser avec le socket retournée par la fonction TCPConnect. ; Affiche un message de réussite avec l'adresse IP du client. MsgBox($MB_SYSTEMMODAL, "", "Client Connecté, adresse IP: " & $sClientIPAddress) 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() ; Ferme le service TCP. EndFunc ;==>OnAutoItExit