CODE DU SERVER MULTI CLIENTS:
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Dim $szIPADDRESS
$szIPADDRESS = InputBox("Connexion à un SERVER", "IP du SERVER : ", @IPAddress1)
;==============================================
;==============================================
;SCRIPT DU SERVER ; A LANCER EN PREMIER
;==============================================
;==============================================
Example()
Func Example()
Sleep (100)
; INFOS A COMPLÉTÉES
Local $nPORT = 14584
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv
Dim $recvstring
; Lancement des services TCP
;==============================================
; Si la connection au port à échouée, alors on recommence
; Création d'un GUI pour recevoir des données d'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
;==============================================
; Fenêtre GUI affichant les données envoyées
;==============================================
While 1
TCPStartup()
; Ouverture d'un port sur le reseau / ATTENTION UN PARE FEU PEU BLOQUER CETTE FONCTION
; Utilisation pour l'ouverture de : L'ip Privée (@IPAddress1) avec le port 14584 (inutilisé normalement)
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT,5000)
$ConnectedSocket = -1
;Attente d'une demande de connection
;==============================================
;MsgBox(0,"","do")
Do
$ConnectedSocket = TCPAccept($MainSocket)
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
$szIP_Accepted = SocketToIP($ConnectedSocket)
Until $ConnectedSocket <> -1
$msg = GUIGetMsg()
; Fermeture de la GUI
;--------------------
If $msg = $GUI_EVENT_CLOSE Then Exit
; 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
;----------------------------------------------------------------
$recvstring=StringSplit($recv,"\")
; Rafraichissement des données envoyées
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$recvstring[1] & " > " & $recvstring[2] & @CRLF & GUICtrlRead($edit))
TCPShutdown()
WEnd
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
► Afficher le texte
Code : Tout sélectionner
#include <Inet.au3>
$yourip=_GetIP()
$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
;==============================================
; 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
TCPStartup()
Else
;Demande de données à envoyées
While 1
; Initialisation de la variable définissant la connexion
;==============================================
; 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
MsgBox(0,"","do")
Exit
ElseIf $szData = "" Then
Sleep (0)
EndIf
; Envoie des données vers le SERVER
$ConnectedSocket = -1
;Connection sur le SERVER d'adresse IP:*voir ImputBox* avec le port 14584 (inutilisé normalement)
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)
TCPSend($ConnectedSocket, $yourip&"\"&$szData)
; Si les données n'ont pas été envoyées, le CLIENT se Déconnecte
;----------------------------------------------------------------
If @error Then MsgBox(0,"","doap")
WEnd
EndIf
EndFunc ;==>Example
Dites moi ce que vous en penser, merci.
Proposez des améliorations niveau performances si vous voulez ^^