Salutation, Je vais vous raconter une histoire:
Il était une fois, AUTOIT, il aidait au début beaucoup de personne aimant l'informatique à faire des "macro", mais AUTOIT étant très réputé et puissant, il évolua et devenu encore + puissant et recueillant + de possibilités de fonctionnement. Mais aujourd'hui, les utilisateurs de AUTOIT se posent une question : Pourquoi les fonctions sur TCP/UDP existent telles si personnes ne sais les faire fonctionner entre 2 ordinateurs ou ne sais que très peut de leur puissance?
C'est alors que ce projet naquit : Le pouvoir de la connexion TCP/UDP !
Je vais tenter de faire un script/tuto sur ces fonctions, et j'ai besoin de VOUS! *Oncle Sam pour ceux qui connaissent*
Voici les deux scripts là ou ils en sont (Explications Traduite):
SERVER :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;SCRIPT DU SERVER ; A LANCER EN PREMIER
;==============================================
;==============================================
Example()
Func Example()
Sleep (100)
; INFOS A COMPLÉTÉES
Local $szServerPC = @ComputerName
Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $nPORT = 14584
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv
; Lancement des services TCP
;==============================================
TCPStartup()
; Ouverture d'un port sur le reseau / ATTENTION UN PARE FEU PEU BLOQUER CETTE FONCTION
; Utilisation pour l'ouverture de : L'ip Public (@IPAddress1) avec le port 14584 (inutilisé normalement)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT,5000)
; Si la connection au port à échouée, alors on recommence
If $MainSocket = -1 Then
Example()
EndIf
; Création d'un GUI pour envoyer des données vers un autre PC part le port ouvert
;==============================================
$GOOEY = GUICreate("Mon Server (IP: " & $szIPADDRESS & ")", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()
; Initialisation de la variable définissant la connexion
;==============================================
$ConnectedSocket = -1
;Attente d'une demande de connection
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1
; Connaitre l'adresse IP du CLIENT
$szIP_Accepted = SocketToIP($ConnectedSocket)
; Fenêtre GUI affichant les données envoyées
;==============================================
While 1
$msg = GUIGetMsg()
; Fermeture de la GUI
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
; Reçoit des données à partir du port connecté / 2048 bytes maximum
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 2048)
; Si les données on mal été reçues, le SERVER se ferme
;----------------------------------------------------------------
If @error Then ExitLoop
; Rafraichissement des données envoyées
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd
If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)
TCPShutdown()
EndFunc ;==>Example
; Fonction permettant de connaitre l'adresse IP du CLIENT connecté au SERVER
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "ptr", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
CLIENT :
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
$szIPADDRESS = InputBox("Connexion à un SERVER", "IP du SERVER : ", @IPAddress1)
Opt('MustDeclareVars', 1)
;==============================================
;==============================================
;SCRIPT DU CLIENT ; A LANCER EN DEUXIEME
;==============================================
;==============================================
Example()
Func Example()
; INFOS A COMPLÉTÉES
Local $ConnectedSocket, $szData
Local $nPORT = 14584
; Lancement des services TCP
;==============================================
TCPStartup()
; Initialisation de la variable définissant la connexion
;==============================================
$ConnectedSocket = -1
;Connection sur le SERVER d'adresse IP:*voir ImputBox* avec le port 14584 (inutilisé normalement)
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
; Si une erreur existe alors on l'envoie par MsgBox puis le script se ferme
If @error Then
MsgBox(4112, "Error", "TCPConnect failed with WSA error: " & @error)
; Si il n'y a pas d'erreur le CLIENT est connecté au SERVER
Else
;Demande de données à envoyées
While 1
; InputBox des données à envoyées
$szData = InputBox("Data for Server", @LF & @LF & "Enter data to transmit to the SERVER:")
; Si il y a une erreur ou si le bouton annuler est préssé le script se ferme, si les données envoyées sont nul, ne rien faire
If @error Then
Exit
ElseIf $szData = "" Then
Sleep (0)
EndIf
; Envoie des données vers le SERVER
TCPSend($ConnectedSocket, $szData)
; Si les données n'ont pas été envoyées, le CLIENT se Déconnecte
;----------------------------------------------------------------
If @error Then ExitLoop
WEnd
EndIf
EndFunc ;==>Example
Si vous avez des amélioration venez me les proposer !
Le script sera mis à jour lorsque une modification sera effectuée
Voici les Problèmes ou questions que je me pose avant de continuer merci de bien vouloir y répondre
:
-Lorsque le bouton Cancel une nouvelle GUI du serveur s'ouvre ( à corriger par : Lorsque le bouton CANCEL est appuyé, le CLIENT se ferme et le SERVER reste tel qu'il est en attente d'une nouvelle connexion)