Envoie des données sur un socket ouvert.
UDPSend ( socketarray, data )
socketarray | Le socket ou le tableau retourné par la fonction UDPOpen. |
data | Binaire ou chaine qui doit être envoyé au socket connecté. |
Succès: | Retourne le nombre d'octets envoyés au socket ouvert. |
Échec: | Définit @error <> 0 |
@error: |
-1, -2 ou -3 socket ou tableau invalide. 1 = Le paramètre IPAddr est incorrect. 2 = Le port est incorrect. Valeur retournée par l'API Windows WSAGetError (Consultez MSDN). |
#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