[R] Serveur/Client

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jyz93
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 26 juin 2009 14:12
Status : Hors ligne

[R] Serveur/Client

#1

Message 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,
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: serveur/client

#2

Message par Iste »

Image
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
Signez ici
jyz93
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 26 juin 2009 14:12
Status : Hors ligne

Re: serveur/client

#3

Message 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...
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: serveur/client

#4

Message 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 !
Signez ici
jyz93
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 26 juin 2009 14:12
Status : Hors ligne

Re: serveur/client

#5

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: serveur/client

#6

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
jyz93
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 26 juin 2009 14:12
Status : Hors ligne

Re: serveur/client

#7

Message 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...
jyz93
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 26 juin 2009 14:12
Status : Hors ligne

Re: [..] serveur/client

#8

Message 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 :roll:
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] serveur/client

#9

Message 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.
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] serveur/client

#10

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
jyz93
Niveau 1
Niveau 1
Messages : 8
Enregistré le : ven. 26 juin 2009 14:12
Status : Hors ligne

Re: [..] serveur/client

#11

Message 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é :roll:

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,
Répondre