Ouvre un socket connect� � un serveur existant.
UDPOpen ( IPAddr, port [, flag = 0] )
IPAddr | L'adresse IPv4 avec des points tel que: "192.162.1.1". |
port | Port sur lequel le socket cr�� sera connect�. |
flag | [optionnel] $UDP_OPEN_DEFAULT (0) = (par d�faut) - Aucune option suppl�mentaire n'est d�finie. $UDP_OPEN_BROADCAST (1) = Autorise le broadcasting sur l'adresse "255.255.255.255". Les constantes sont d�finies dans "AutoItConstants.au3". |
Succ�s: |
Retourne le tableau suivant: [1] le socket r�el [2] l'adresse IP sp�cifi�e [3] le port. Nous avons besoin de ces informations pour des appels ult�rieurs � UDPSend(), o� nous passons cette structure/tableau de socket. |
�chec: | Retourne 0 � la position [0] du tableau et d�finit @error <> 0. |
@error: | Valeur retourn�e par l'API Windows WSAGetError (consultez MSDN). |
Cette fonction est utilis�e par un client pour communiquer avec le serveur.
UDPBind, UDPCloseSocket, UDPRecv, UDPSend
#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