Page 1 sur 1
[R] Serveur/Client
Posté : ven. 26 juin 2009 14:27
par jyz93
Bonjour a tous,
Je débute en autoit et je cherche un faire un simple client/serveur
Mon problème et que lorsque j'envoie des donnée aux serveur, sa marche une fois mais pas 2 :/
voici mon code :
serveur.au3
Code : Tout sélectionner
TCPStartup();
$Socket = TCPListen("127.0.0.1", 65432, 100);
Do
$ConnectedSocket = TCPAccept($Socket)
Until $ConnectedSocket <> -1
while 1
$recevoir = TCPRecv($ConnectedSocket, 2048);
If $recevoir = "bonjour" Then MsgBox(4096, "Bonjour", "Bonjour", 10);
Wend
client.au3
Code : Tout sélectionner
#include <GUIConstants.au3>
$Form1 = GUICreate("Test", 400, 400);
$Button_1 = GUICtrlCreateButton("Dire bonjour", 10, 30, 200);
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button_1
bouton();
EndSwitch
WEnd
GUIDelete();
func bouton()
TCPStartup();
$Socket = TCPConnect("127.0.0.1", 65432);
TCPSend($Socket, "bonjour");
TCPShutdown();
EndFunc
Lorsque j'appuie une fois sur le bouton du client la boite de dialogue s'ouvre mais en revanche lorsque j'appuie une seconde fois rien ne se passe.
L'erreur semble venir du serveur car lorsque je redémarre celui si sa fonctionne qu'une fois encore...
merci de votre aide,
Re: serveur/client
Posté : ven. 26 juin 2009 14:50
par Iste

Merci de prendre connaissance des regle de présentation des messages.
Il y a un exemple complet et fonctionel dans la doc, vous pouvez vous baser dessus.
De plus, un petit recherche sur le forum vous conduira droit sur la version traduite par L4crymal
Re: serveur/client
Posté : ven. 26 juin 2009 15:07
par jyz93
J'ai commencé hier soir a regardé un peu l'autoit.
J'ai bien regardé la documentation mais un détail doit m'échapper (si non ou j'aurais trouvé les fonctions).
J'ai deja cherché sur google et sur forum et je tombe principalement sur ce sujet :
http://www.autoitscript.fr/forum/viewto ... eur#p18727
Or il ne s'agit de ce problème car mon problème n'est pas un client qui se ferme lorsque le serveur se ferme aussi...
Re: serveur/client
Posté : ven. 26 juin 2009 15:19
par Iste
ha ben quand je cherche sur le forum je tombe sur 7 page de message avec "client server", dont le sujet suivant
http://www.autoitscript.fr/forum/viewto ... ent#p11234
Une foi de plus, basez vous sur ce code, et adaptez le a vos besoin.
Celui ci est fonctionnel
Et si vraiment ca bloque, revenez et nous serons heureux de vous aider !
Re: serveur/client
Posté : ven. 26 juin 2009 15:34
par jyz93
Ce code je l'ai deja étudier dans la documentation...
La partie du code qui m'intéresse :
Code : Tout sélectionner
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
Mon serveur n'utilise pas d'interface GUI pour le moment je l'ai donc adapté...
Code : Tout sélectionner
while 1
; Reçoit des données à partir du port connecté / 2048 bytes maximum
;----------------------------------------------------------------
$recevoir = TCPRecv($ConnectedSocket, 2048);
; Si je reçois "bonjour" alors j'affiche la boite de dialogue.
;----------------------------------------------------------------
If $recevoir = "bonjour" Then MsgBox(4096, "Bonjour", "Bonjour", 10);
Wend
Il y a l'instruction :
Code : Tout sélectionner
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
Que j'avoue ne pas avoir bien compris mais je ne pense pas que sa a avoir quelque chose avec mon problème car je n'utilise pas de GUI.
Re: serveur/client
Posté : ven. 26 juin 2009 17:04
par Tlem
Si dans un code, vous voyez une fonction qui commence par 'GUIxxxxxx', alors il est lié à une interface graphique.
Vous devez donc comprendre l'utilisation de ces fonctions, de manière à les supprimer ou adapter en fonction de vos besoins.
Re: serveur/client
Posté : ven. 26 juin 2009 18:15
par jyz93
Modifie les données d'un contrôle.
En gros on peut rajouté des items dans une liste déroulante...
La sa touche une zone de texte (dans l'exemple de la communication réseau autoit) je ne pense pas que sa me soit utile...
Re: [..] serveur/client
Posté : sam. 27 juin 2009 13:09
par jyz93
Si dans un code, vous voyez une fonction qui commence par 'GUIxxxxxx', alors il est lié à une interface graphique.
Vous devez donc comprendre l'utilisation de ces fonctions, de manière à les supprimer ou adapter en fonction de vos besoins.
Si elle est lié a une interface graphique et que je n'utilise pas d'interface graphique.
Pourquoi je ne pourrais pas la supprimé comme sa ?
Si non c'est bon je sais a quoi elle sert mais j'ai toujours pas trouvé comment résoudre mon problème
Personne a de solution ?
Je voulais voir un peu se que valent les fonctions network en autoit

Re: [..] serveur/client
Posté : sam. 27 juin 2009 14:46
par Iste
Bon, je suis vraiment trop gentil car j'ai psa vraiment l'impression que vous ayez tenu compte de nos remarque...
Coté server, c'est tres bien. Simple et peu complet, mais c'est un minimum fonctionel.
Coté Client, c'est bien. sans plus..
Le server attend qu'un client se connecte pour établir une liaison, puis écoute. Dans votre exemple, il ne fait que ca.
Hors votre client se connecte, envoi l'info, et se déco !
Le server ne cherche pas ensuite a se reconnecter a d'autre client, donc ca marche plus !
Voila, vous savez d'ou vient le probleme.
Re: [..] serveur/client
Posté : sam. 27 juin 2009 15:07
par Tlem
Pour la partie graphique, parfois vous ne pouvez pas supprimer simplement une partie du code, car selon comment cela à été fait, certaines instruction vont chercher leur information sur la partie graphique.
Comme par exemple un champ input qui contiendrait le nom du serveur à connecter.
Si vous supprimez ce champs, alors il vous faut impérativement supprimer la partie qui va lire son contenu, et attribuer la valeur manuellement.
Re: [..] serveur/client
Posté : sam. 27 juin 2009 16:20
par jyz93
Iste a écrit :Bon, je suis vraiment trop gentil car j'ai psa vraiment l'impression que vous ayez tenu compte de nos remarque...
Coté server, c'est tres bien. Simple et peu complet, mais c'est un minimum fonctionel.
Coté Client, c'est bien. sans plus..
Le server attend qu'un client se connecte pour établir une liaison, puis écoute. Dans votre exemple, il ne fait que ca.
Hors votre client se connecte, envoi l'info, et se déco !
Le server ne cherche pas ensuite a se reconnecter a d'autre client, donc ca marche plus !
Voila, vous savez d'ou vient le probleme.
Si j'ai quand même tenu conte de vos remarques...
Mon client je l'ai modifié sa marche toujours pas... j'ai enlevé le tctshutdown (la déconnexion)
le serveur devrait donc toujours etre connécté au client et l'écouté
EDIT : probléme resolut j'ai cherché du coté serveur et j'ai mi :
Code : Tout sélectionner
TCPStartup();
$Socket = TCPListen("127.0.0.1", 65432, 100);
while 1
Do
$ConnectedSocket = TCPAccept($Socket)
Until $ConnectedSocket <> -1
$recevoir = TCPRecv($ConnectedSocket, 2048);
If $recevoir = "bonjour" Then MsgBox(4096, "Bonjour", "Bonjour", 10);
Wend
et c'est passé
merci de votre aide,