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