Functions > Network >


UDPCloseSocket

Ferme un socket UDP.

UDPCloseSocket ( socketarray )

Paramètre

socketarray Le socket/tableau retourné par la fonction UDPBind ou UDPOpen.

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0 et définit @error <> 0.
@error: -3 ou -4 socket/tableau invalide.
Valeur retournée par l'API Windows WSAGetError (Consultez MSDN).

En relation

UDPShutdown(), UDPStartup(), UDPBind, UDPOpen

Exemple

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

; Commencez d'abord par cliquer sur "1. Serveur"
; Puis démarrez une seconde instance du script en sélectionnant "2. Client"

Example()

Func Example()
    UDPStartup() ; Démarre le service UDP.

    ; Enregistre OnAutoItExit qui sera appelée lorsque le script se fermera.
    OnAutoItExitRegister("OnAutoItExit")

    ; Assigne 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 = 65532 ; Port utilisé pour la connexion.

    #Region GUI
    Local $sTitle = "UDP Start"
    Local $hGUI = GUICreate($sTitle, 250, 70)

    Local $idBtnServer = GUICtrlCreateButton("1. Server", 65, 10, 130, 22)

    Local $idBtnClient = GUICtrlCreateButton("2. Client", 65, 40, 130, 22)

    GUISetState(@SW_SHOW, $hGUI)

    Local $iMsg = GUIGetMsg()
    While $iMsg <> $GUI_EVENT_CLOSE
        Switch $iMsg
            Case $idBtnServer
                WinSetTitle($sTitle, "", "Serveur UDP démarré")
                GUICtrlSetState($idBtnClient, $GUI_HIDE)
                GUICtrlSetState($idBtnServer, $GUI_DISABLE)
                If Not MyUDP_Server($sIPAddress, $iPort) Then ExitLoop
            Case $idBtnClient
                WinSetTitle($sTitle, "", "Client UDP démarré")
                GUICtrlSetState($idBtnServer, $GUI_HIDE)
                GUICtrlSetState($idBtnClient, $GUI_DISABLE)
                If Not MyUDP_Client($sIPAddress, $iPort) Then ExitLoop
        EndSwitch

        Sleep(10)
        $iMsg = GUIGetMsg()  
    WEnd

    #EndRegion GUI
EndFunc   ;==>Example

Func MyUDP_Server($sIPAddress, $iPort)
    ; Assigne une variable locale avec le socket et se connecte à l'adresse IP et au port spécifié.
    Local $iSocket = UDPBind($sIPAddress, $iPort)

    ; Si une erreur s'est produite, affiche le code d'erreur et retourne False.
    If @error Then
        ; Quelqu'un est probablement déjà connecté sur cette adresse IP et ce port (script déjà en cours d"exécution?).
        Local $iError = @error
        MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Server:" & @CRLF & "Impossible d'établir la liaison, code d'erreur: " & $iError)
        Return False
    EndIf

    ; Assigne une variable locale pour stocker les données reçues.
    Local $sReceived = ""

    Do
        ; Nous attendons la chaîne "toto" OU "tata" (exemple de script UDPSend) : 4 octets de longueur.
        $sReceived = UDPRecv($iSocket, 4)
    Until $sReceived <> ""

    ; Notes: Si vous ne savez pas de quelle longueur seront les données,
    ; utilisez, par exemple: 2048 pour paramètre maxlen et appelez la fonction jusqu'à ce qu'elle ne retourne rien ou erreur.

    ; Affiche la chaîne reçue.
    MsgBox($MB_SYSTEMMODAL, "", "Server:" & @CRLF & "Reçu: " & $sReceived)

    ; Ferme le socket.
    UDPCloseSocket($iSocket)
EndFunc   ;==>MyUDP_Server

Func MyUDP_Client($sIPAddress, $iPort)
    ; Assigne une variable locale avec le socket et se connecte à un socket d'écoute avec l'adresse IP et le port spécifié.
    Local $iSocket = UDPOpen($sIPAddress, $iPort)
    Local $iError = 0

    ; Si une erreur s'est produite, affiche le code d'erreur et retourne False.
    If @error Then
        ; Le serveur est probablement hors ligne ou le port n'est pas ouvert sur le serveur.
        $iError = @error
        MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Impossible de se connecter, code d'erreur: " & $iError)
        Return False
    EndIf

    ; Envoie la chaîne "toto" convertie en binaire sur le serveur.
    UDPSend($iSocket, StringToBinary("toto"))

    ;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), "", "Client:" & @CRLF & "Impossible d'envoyer des données, code d'erreur: " & $iError)
        Return False
    EndIf

    ; Ferme le socket.
    UDPCloseSocket($iSocket)
EndFunc   ;==>MyUDP_Client

Func OnAutoItExit()
    UDPShutdown() ; Ferme le service UDP.
EndFunc   ;==>OnAutoItExit