Page 1 sur 1
[R] Serveur en AutoIt
Posté : lun. 09 août 2010 19:26
par matheod
Bonjour,
Sur de nombreux topics je vous vois parler de "créer un serveur" en auto it.
Mais aucun ne dit comment faire.
J'ai juste trouver les fonctions pour s'y connecté mais pas pour en créer.
Si vous pourriez me rediriger vers le post/site ou m'expliquer comment faire, ce serait sympa.
merci
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 19:30
par matheod
Je viens de trouver des sujets intéressant, je suis en train de lire
(plus pratique la recherche google que la recherche interne au forum :p)
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 19:38
par timmalos
Oui c'est possible, mais très difficile à mettre en place car certainement assez inutile et astreignant (Autoit n'est disponible que sous Windows, et rares sont les serveurs Windows pas chers)
En gros ca passe par du protocole TCP / IP, plusieurs exemples sont disponibles sur le forum, c'est le principe Serveur/Client. Le Script Serveur tourne sur le PC, et réponds aux clients. Mais le PC doit également comprendre que toutes les requetes passant par un certain port doivent être rédirigées vers ce serveur Autoit, à la manière d'un serveur Apache.
Bref, je le dis souvent, on pourrait même creer un site internet dynamique avec Autoit, mais je ne vois aucun interêt par rapport à ce qui existe déjà (Je pense notamment au Python et ses Frameworks associés, car Autoit aurait quelques avantages par rapport à PHP mais le temps de réponse resterait trop long )
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 20:06
par SrBelial
bonne question !
comme le dit timmalos, l'intérêt est vraiment limité ....
Cela dit, mettons les choses bien au clair, lorsque l'on parle de serveur en autoit, c'est au sens "serveur logiciel", cela représente uniquement la partie de l'application qui sera interrogée via le réseau par les scripts clients.
En gros faire une application serveur en autoit se fait exactement de la même façon qu'un script normal ! le seul impératif est bien entendu d'utiliser les fonctions du langages servant à l'ouverture et à la fermeture de connexions, ainsi qu'à la réception des données envoyées par les scripts clients (qui s'exécutent sur les machines des utilisateurs).
La documentation officielle est très intéressante sur ce sujet, car elle fourni des exemples très simples mais fonctionnels, qui permettent de découvrir la communication client/serveur en utilisant les sockets, les protocoles TCP et UDP ... tout ce qu'il faut pour bien débuter ! (ça reste du bas niveau mais c'est aisément réutilisable dans des scripts "maison")
Comment découvrir ce monde merveilleux :
Ouvrir la documentation (Touche F1 dans l'éditeur SciTE)
Onglet index
Rechercher TCP (en particulier fonction TCPConnect)
Rechercher UDP (en particulier fonction UDPSend)
=> étudier et manipuler un peu les exemples fournis (et regarder aussi les fonctions annexes)
bon courage !
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 20:54
par matheod
ok merci
A votre avis, je peux arriver à envoyer combien d'image (300x200) par seconde avec cette methode :p
Car je souhaite envoyer des parties de l'écran entre 2 personnes ^^
D'ailleur faudrais que je trouve la meilleur facon de transmette l'info image (enregistré en image puis recuperer le fichier et l'envoyé ?)
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 21:04
par SrBelial
avec cette méthode c'est pas une très bonne idée ....
ça risque d'être très lourd à gérer ! ce sera utilisable relativement simplement pour envoyer et recevoir de petites quantités de données, essentiellement sous forme de chaines de caractères .....
après bon bah on peut aussi envoyer des images sous forme de données brutes (pas de fichier, juste le contenu, et le script destinataire reconstruit le fichier à partir de ces données) mais là va falloir gérer l'envoi / transmission des données par paquet (la taille des données que l'on peut envoyer à un niveau aussi bas est limitée, du coup pour envoyer une image il va falloir gérer une mémoire tampon -"buffer"- qui sera remplie au fur et à mesure, envoyée, reçue, reremplie avec la suite des données, etc ...)
pour envoyer des fichiers à mon avis il sera préférable soit de les envoyer en passant par l'intermédiaire d'un script php, soit en faisant du partage de fichiers (si les deux ordis sont sur un même réseau)
d'ici à déterminer combien d'images par seconde passeront .... les tests vous le diront !!

Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 21:08
par matheod
Le problème étant que les ordis ne sont justement pas sur le réseau ^^
Et quand je voit cette histoire de buffer hum je vais peut être changer d'avis xd ^^
Mais en php ca risque de ne pas être très rapide.
A la rigueur passer par un serveur ftp publique mais bon oO
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 21:15
par SrBelial
oh l'envoi de petits fichiers en php est relativement rapide ! cela ne nécessite pas un protocole de connexion lourd comme pour du ftp par exemple (qui nécessite authentification et tout le toutim) ....
le site du zéro a un super tuto sur le php avec justement un exemple d'envoi de fichier, à mon avi pour une image en 300x200, si elle est correctement compressée, ça sera rapide ! (peut etre moins que du ftp, qui comme son nom l'indique est dédié au transfert de fichiers)
perso pour des gros fichiers, sans hésitation ftp, mais dans ton cas .... faut tester
(quand au ftp publique ...... évite autant que possible ! soit t'installe un serveur ftp sur un des deux ordis, soit tu prend un hébergement pour avoir un serveur ftp tiers, mais qui ne soit utilisé que par toi)
Re: [..] Serveur en auto it
Posté : lun. 09 août 2010 21:22
par matheod
J'ai peur avec le php que le serveur soit mort en moins de temps qu'il ne faut pour dire php
Mais bon le problème est toujours la avec les serveurs ftp, si je n'ai pas de serveur ftp ca ne le fera pas ^^
Re: [..] Serveur en auto it
Posté : mar. 10 août 2010 02:20
par timmalos
Hmmm J'ajouterais meme que pour envoyer au plus vite vos images vous devrez preferer le protocole UDP au TCP mais que l'UDP qui meme si il est plus rapide ne verifie pas que les packets ont bien été recus : Beaucoup plus difficile à coder dans votre cas, il faudra donc utiliser le TCP Mais ca se fait bien, regardez tous les exemples de tchat disponibles sur le forum, apres il suffira de compresser au maximum votre image et ca ne devrait pas etre tres long.
Ceci dit, pourquoi reinventer la roue?
http://www.teamviewer.com/fr/index.aspx <-- Gratuit, Sans installation et automatisable avec Autoit.
Re: [..] Serveur en auto it
Posté : mar. 17 août 2010 15:29
par TommyDDR
Ayant déjà créé des scripts de clients/serveur, je peux peut être vous aider.
Mais tout d'abord il faut savoir que si vous passez par une box, par défaut celle-ci bloquera surement tous les ports
sortants entrants. A vous de voir en fonction de votre FAI comment faire pour débloquer votre port.
Je me suis lancer dans un script TCP de partage d'une partie du bureau (autour de la souris) je pensais que ca me prendrai moins de temps que ça donc je m'arrête là ^^'
(Le programme est fonctionnel mais il ne faut pas trop le titiller au niveau des déconnexions)
► Afficher le texteServeur
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $SrvIP = @IPAddress1
Dim $SrvPort = "1234"
Dim $NombreClients = 0
TCPStartup()
Dim $MainSocket = TCPListen($SrvIP, $SrvPort)
Dim $Clients[1]
Dim $Buffer = ""
$Gui = GUICreate("test", 300, 300)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
Local $Socket
Local $Recv
While(True)
$Socket = TCPAccept($MainSocket)
If($Socket <> -1) Then
ConnexionClient($Socket)
EndIf
For $i = 0 To UBound($Clients)-2
$Recv = TCPRecv($Clients[$i], 2048, 1)
If($Recv <> "") Then
EnvoyerALAutreClient($i, $Recv)
EndIf
Next
Wend
Func ConnexionClient($Socket)
If($NombreClients > 0) Then
Broadcast("Check")
EndIf
If($NombreClients < 2) Then
$Clients[$NombreClients] = $Socket
$NombreClients += 1
Redim $Clients[$NombreClients+1]
If($NombreClients = 2) Then
Broadcast("EnvoiPossible")
Else
Envoyer($Socket, "Attendre" & "Fini!§!")
EndIf
Else
Envoyer($Socket, "Trop de clients." & "Fini!§!")
TCPCloseSocket($Socket)
EndIf
EndFunc
Func Broadcast($Donnee)
For $i = 0 To 1
If($i < $NombreClients) Then
Envoyer($Clients[$i], $Donnee & "Fini!§!")
EndIf
Next
EndFunc
Func Envoyer($Socket, $Donnee)
If(TCPSend($Socket, $Donnee) = 0) Then
If($Socket = $Clients[0]) Then
$Clients[0] = $Clients[1]
Else
$Clients[1] = 0
EndIf
$NombreClients -= 1
If($NombreClients = 0) Then
ReDim $Clients[1]
Else
ReDim $Clients[$NombreClients]
EndIf
TCPCloseSocket($Socket)
EndIf
EndFunc
Func EnvoyerALAutreClient($Client, $Donnee)
Local $EnvoyerAuClient = 0
If($Client = 0) Then
$EnvoyerAuClient = 1
EndIf
Envoyer($Clients[$EnvoyerAuClient], $Donnee)
EndFunc
Func quit()
Exit
EndFunc
► Afficher le texteClient
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#Include <ScreenCapture.au3>
Opt("MustDeclareVars", 1)
Opt("GUIOnEventMode", 1)
Dim $Gui
Dim $IP = "xx.xx.xx.xx" ;~ Remplacez par votre IP Public, vous pouvez la trouver sur http://www.monip.org (ou @IPAdress pour travailler en LAN : en LAN, pas besoin de débloqué les ports sur la BOX)
Dim $Port = "1234"
Dim $Socket
Dim $Buffer = ""
Dim $EnvoiPossible = False
Dim $Image = 0
Local $Recv
Local $Debug = ""
$Gui = GUICreate("Ecran partenaire", 300, 315)
Dim $LabelConnexion = GUICtrlCreateLabel("Connexion en cours...", 0, 0, 200, 15)
Dim $Bouton = GUICtrlCreateButton("Envoyer écran", 5, 290, 290, 20)
GUICtrlSetBkColor($LabelConnexion, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetOnEvent($Bouton, "EnvoiEcran")
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
GUISetState()
TCPStartup()
Do
$Socket = TCPConnect($IP, $Port)
If($Socket <= 0) Then
Sleep(1000)
EndIf
Until($Socket > 0)
GUICtrlSetData($LabelConnexion, "Connexion établie.")
GUICtrlSetColor($LabelConnexion, 0x008000)
While(True)
$Recv = TCPRecv($Socket, 2048, 1)
If($Recv <> "") Then
Recv($Recv)
EndIf
Sleep(10)
WEnd
Func EnvoiEcran()
Local $PosSouris = MouseGetPos()
_ScreenCapture_Capture(@ScriptDir & "\MonImage.jpg", $PosSouris[0]-150, $PosSouris[1]-140, $PosSouris[0]+150, $PosSouris[1]+140, False)
Local $File = FileOpen(@ScriptDir & "\MonImage.jpg", 16)
Local $Contenu = FileRead($File)
FileClose($File)
Envoyer($Contenu)
FileDelete(@ScriptDir & "\MonImage.jpg")
EndFunc
Func Envoyer($Donnee)
If(TCPSend($Socket, $Donnee & "Fini!§!") = 0) Then
GUICtrlSetData($LabelConnexion, "Connexion au serveur perdue")
GUICtrlSetColor($LabelConnexion, 0xFF0000)
EndIf
EndFunc
Func Recv($Donnee)
$Buffer &= BinaryToString($Donnee)
$Debug &= BinaryToString($Donnee) & @CRLF
If(StringRight($Buffer, 7) = "Fini!§!") then
$Buffer = StringTrimRight($Buffer, 7)
Local $Commandes = StringSplit($Buffer, "Fini!§!", 1)
For $i = 1 To $Commandes[0]
If($Commandes[$i] = "Attendre") Then
GUICtrlSetData($LabelConnexion, "Attente d'un partenaire.")
GUICtrlSetColor($LabelConnexion, 0x808000)
ElseIf($Commandes[$i] = "EnvoiPossible") Then
GUICtrlSetData($LabelConnexion, "Vous pouvez envoyer une image.")
GUICtrlSetColor($LabelConnexion, 0x008000)
ElseIf($Commandes[$i] = "Trop de clients.") Then
GUICtrlSetData($LabelConnexion, "Trop de clients.")
ElseIf($Commandes[$i] = "Check") Then
ElseIf($Commandes[$i] = "Encore") Then
EnvoiEcran()
Else
Local $File = FileOpen(@ScriptDir & "\Image.jpg", 18)
FileWrite($File, $Commandes[$i])
FileClose($File)
If($Image <> 0) Then
GUICtrlDelete($Image)
EndIf
$Image = GUICtrlCreatePic(@ScriptDir & "\Image.jpg", 0, 15, 300, 280)
FileDelete(@ScriptDir & "\Image.jpg")
Envoyer("Encore")
EndIf
Next
$Buffer = ""
EndIf
EndFunc
Func quit()
Exit
EndFunc
En espérant que vous en ferez une utilisation saine ^^
TommyDDR.
Ps : désolé pour le peu de commentaires ...
Re: [..] Serveur en auto it
Posté : mer. 18 août 2010 09:58
par Iste
TommyDDR a écrit :Mais tout d'abord il faut savoir que si vous passez par une box, par défaut celle-ci bloquera surement tous les port sortant.
Les box ne bloquent rien, elles ne savent juste pas ou rediriger les paquets
entrants
A part ca, si c'est pour du partage d'écrans, il y a des application prévues a cet effet !
VNC, logmein, ou le plus simple d'utilisation selon moi TeamViewer (voir
http://sebsauvage.net/rhaa/index.php?20 ... a-distance) (meme que timmalos en a parlé mais que je l'avais pô vu ! :s)
Sinon, pour avoir déja essayé de faire de l'application de partage d'ecran en autoit (
http://autoitscript.fr/forum/viewtopic. ... vnc#p19816)
,je sais que ce langage n'est vraiment pas adapté. En claire, on obtien au mieux, une image par seconde. Et ce dans de bonnes conditions.
Tout les autres points concernant le "serveur autoit" on déja été abordés par mes collègues. En gros :
- Un vrai server c'est payant
- un server autoit c'est pas utile
- Une appli client-server c'est compliqué
Sinon :
matheod a écrit :J'ai peur avec le php que le serveur soit mort en moins de temps qu'il ne faut pour dire php
Vous risquez bien plus de flinguer un server avec Autoit !
Bref, pour votre problème, si vous voulez vraiment vous y essayer, ne cherchez pas un server, mais juste comment faire pour faire communiquer deux script via TCP/IP
Re: [..] Serveur en auto it
Posté : mer. 01 sept. 2010 03:46
par matheod
Merci pour toutes ces infos

Re: [..] Serveur en AutoIt
Posté : mer. 01 sept. 2010 11:39
par SrBelial
^___^
Si résolu, merci de penser à le signaler par la balise [R] en début de titre du premier message !
Re: [..] Serveur en AutoIt
Posté : mer. 01 sept. 2010 16:57
par matheod
Je met en résolu pour le moment, je repasserais en mode normal si j'ai d'autre question

Re: [R] Serveur en AutoIt
Posté : jeu. 02 sept. 2010 06:25
par matwachich
Bah avec l'UDF TCP
http://www.autoitscript.com/forum/index ... opic=74325 c'est un jeu d'enfants de gérer des connexion client/serveur en tcp!