Ferme un socket TCP.
TCPCloseSocket ( socket )
socket | L'identifiant du socket (SocketID) tel que retourné par un appel à la fonction TCPListen ou TCPAccept. |
Succès: | Retourne 1. |
Échec: | Retourne 0 et définit @error <> 0. |
@error: | Valeur de retour de l'API windows WSAGetError (Consultez MSDN). |
TCPAccept, TCPConnect, TCPListen, TCPShutdown, TCPStartup
#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> ; Commencez d'abord par cliquer sur "1. Server" ; Puis démarrez une seconde instance du script en sélectionnant "2. Client" Example() Func Example() TCPStartup() ; Démarre le service TCP. ; Enregistre OnAutoItExit qui sera appelée lorsque le script sera fermé. 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 = 65432 ; Port utilisé pour la connexion. #Region GUI Local $sTitle = "TCP 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, "", "TCP Server started") GUICtrlSetState($idBtnClient, $GUI_HIDE) GUICtrlSetState($idBtnServer, $GUI_DISABLE) If Not MyTCP_Server($sIPAddress, $iPort) Then ExitLoop Case $idBtnClient WinSetTitle($sTitle, "", "TCP Client started") GUICtrlSetState($idBtnServer, $GUI_HIDE) GUICtrlSetState($idBtnClient, $GUI_DISABLE) If Not MyTCP_Client($sIPAddress, $iPort) Then ExitLoop EndSwitch Sleep(10) $iMsg = GUIGetMsg() WEnd #EndRegion GUI EndFunc ;==>Example Func MyTCP_Client($sIPAddress, $iPort) ; Assigne une variable locale avec le socket et se connecte à une socket d'écoute avec l'adresse IP et le port spécifié. Local $iSocket = TCPConnect($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 & "Connexion impossible, code de l'erreur: " & $iError) Return False EndIf ; Envoie la chaîne "tata" au serveur. TCPSend($iSocket, "tata") ; Si une erreur s'est produite affiche le code d'erreur et retourne Faux. If @error Then $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Ne peut pas envoyer de donnée, code de l'erreur: " & $iError) Return False EndIf ; Ferme le socket. TCPCloseSocket($iSocket) EndFunc ;==>MyTCP_Client Func MyTCP_Server($sIPAddress, $iPort) ; Assigne une variable locale avec la socket et de se connecte à l'adresse IP et le port spécifié avec un maximum de 100 connexions en attente. Local $iListenSocket = TCPListen($sIPAddress, $iPort, 100) Local $iError = 0 If @error Then ; Quelqu'un est probablement déjà à l'écoute sur cette adresse IP et le port (scénario déjà en cours?). $iError = @error MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Server:" & @CRLF & "Ne peut pas écouter, code d'erreur: " & $iError) Return False EndIf ; Assigne une variable locale pour être utilisé par le socket client. Local $iSocket = 0 Do ; Attend que quelqu'un se connecte (illimité). ; Accepte les connexions entrantes si présent (Socket fermé 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), "", "Serveur:" & @CRLF & "Ne peut pas accepter la tentative de connexion, code de l'erreur: " & $iError) Return False EndIf If GUIGetMsg() = $GUI_EVENT_CLOSE Then Return False Until $iSocket <> -1 ; si différent de -1, un client est connecté. ; Ferme le socket d'écoute pour permettre par la suite une autre connexion. TCPCloseSocket($iListenSocket) ; Assigne une variable locale avec les données reçues. Local $sReceived = TCPRecv($iSocket, 4) ; nous attendons la chaîne "tata" OU "toto" (exemple de script TCPRecv): 4 octets de longueur. ; Notes: Si vous ne connaissez pas la longueur des 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, "", "Serveur:" & @CRLF & "Reçu: " & $sReceived) ; Ferme le socket. TCPCloseSocket($iSocket) EndFunc ;==>MyTCP_Server Func OnAutoItExit() TCPShutdown() ; Ferme le service TCP. EndFunc ;==>OnAutoItExit