Functions > Network >


TCPAccept

Permet les connexions entrantes sur un socket.

TCPAccept ( mainsocket )

Param�tre

mainsocket L'identifiant du socket principal (SocketID) tel que retourn� par un appel � la fonction TCPListen.

Valeur de retour

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).

En relation

TCPCloseSocket, TCPListen, TCPRecv, TCPStartup, TCPTimeout (Option)

Exemples

Exemple 1

#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


Exemple 2

#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