IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Conception d'une sorte de client FTP


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut Conception d'une sorte de client FTP
    Je suis en train de me concentrer sur ce qu'on pourrait appeler pour simplifier les choses "un client ftp". Je coince devant un problème extrèmement bete : Chaque fois que j'envoie une commande (du genre "user user"), le serveur ftp me renvoie une réponse que je capte à l'aide de la fonction recv du C. Cependant, je fais des tests sur un serveur libre linux et lorsque j'envoie la commande "pass password", le serveur me renvoie deux réponses :

    1ère réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    230-Welcome, archive user anonymous@localhost !
    2ème réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    230-
    230-The local time is: Thu Mar 22 20:28:26 2007
    230-
    230-This is an experimental FTP server.  If have any unusual problems,
    230-please report them via e-mail to <root@benji-desktop>.
    230-
    230 Anonymous access granted, restrictions apply.
    Je vous fais le résumé d'une connexion ftp vers mon serveur pour que vous voyez mieux le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
     
    >> user anonymous
    331 Anonymous login ok, send your complete email address as your password.
     
    >> pass toto@titi.tutu
    230-Welcome, archive user anonymous@localhost !
     
    >> pasv
    230-
    230-The local time is: Thu Mar 22 20:28:26 2007
    230-
    230-This is an experimental FTP server.  If have any unusual problems,
    230-please report them via e-mail to <root@benji-desktop>.
    230-
    230 Anonymous access granted, restrictions apply.
     
    >> close
    227 Entering Passive Mode (127,0,0,1,241,180).
    Dans le code source, je suppose qu'à chaque commande envoyée, j'attend UNE réponse du serveur. J'ai essayé de faire un while (recv() > 0) pour faire un "tant que le serveur répond ..." mais la fonction recv est bloquante et si le serveur n'a rien à renvoyer, le client attend. Je ne sais pas si je suis très clair. Je cherche une solution à ce problème. Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    petite rectification : Quand je met un sleep(1); avant l'appel à recv (histoire de laisser le temps au serveur d'envoyer la réponse), tout marche bien. Mais bon... je vais quan meme pas attendre 1 seconde entre chaque commande non?

  3. #3
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Je ne comprends pas le problème. Si le serveur envoie une réponse qui tient en un seul message, alors il suffit de faire un seul recv() qui bloquera jusqu'à ce que le serveur ait répondu.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    non le problème, c'est que quand je fais un recv, le client n'attend pas que le serveur ait fini de "parler". C'est pour cela que lorsque j'insère un "sleep(1)" avant le recv, j'ai bien le message dans sa totalité : en gros, je fais attendre le client manuellement, ce qui est moche

  5. #5
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par gedeon555
    non le problème, c'est que quand je fais un recv, le client n'attend pas que le serveur ait fini de "parler".
    Je ne comprends décidément pas. recv() attend qu'il y ait des données. Après, vous devez bien être capable de déterminer si le serveur a tout transmis ou bien si il faut appeler à nouveau recv(), non?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    ben moi non plus je ne comprend pas, lorsque j'appelle une fois recv après la commande "pass" et une fois recv après la commande "pasv", j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >> pass toto@titi.tutu
    230-Welcome, archive user anonymous@localhost !
     
    >> pasv
    230-
    230-The local time is: Thu Mar 22 20:28:26 2007
    230-
    230-This is an experimental FTP server.  If have any unusual problems,
    230-please report them via e-mail to <root@benji-desktop>.
    230-
    230 Anonymous access granted, restrictions apply.
    Ca se comporte comme si le serveur ftp envoyait deux réponses à la suite de "pass". Comment suis-je sensé savoir si le serveur va envoyer une ou deux réponse ?

    Après, vous devez bien être capable de déterminer si le serveur a tout transmis ou bien si il faut appeler à nouveau recv(), non?
    Je ne vois pas comment

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gedeon555
    230-This is an experimental FTP server.
    Euh ???
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par gedeon555
    Comment suis-je sensé savoir si le serveur va envoyer une ou deux réponse ?
    Il doit bien y avoir une doc explicative des commandes acceptées par le serveur et des réponses générées. La réponse devrait s'y trouver.
    Citation Envoyé par gedeon555
    Je ne vois pas comment
    Même chose qu'au dessus. Soit vous savez à l'avance qu'à telle commande, la réponse tiendra dans n messages, soit vous pouvez déterminer le nombre de messages autrement (message de fin ou autre technique). Sinon, si rien de ceci n'est mis en place, je ne vois pas trop comment détecter la fin des données.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    Le serveur utilisé est ProFTP sous linux. Vous pensez que c'est de sa faute tout ca ? Et qu'avec d'autres serveurs (genre ceux de free), ca marchera ? pacequ'avec Free, effectivement c'est nikel mais je ne tiens pas à faire un client qui ne marche qu'avec le ftp de free

  10. #10
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par gedeon555
    Vous pensez que c'est de sa faute tout ca ?
    Désolé, je ne m'y connais pas assez en FTP et je ne voudrais pas dire de bêtise. J'espère donc que quelqu'un d'autre saura vous répondre.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si le problème est sur le client qui n'attend qu'une seule réception du serveur entre deux entrées de l'utilisateur, le problème est assez facile à régler sur une plate-forme unixoïde, où les sockets et l'entrée standard sont tous les deux des descripteurs :
    Un simple select() sur le socket et STDIN_FILENO suffira.

    Sous Windows, c'est Pain In The Ass (PITA), car :
    • select() ne marche que sur les sockets, qui ne sont pas des descripteurs,
    • La fonction d'attente de Windows ne marche pas sur une console en mode ligne-par-ligne (et on ma répondu un truc du type "ce n'est pas un bug, c'est une feature").

    Ainsi sous Windows, on peut envisager la solution du multi-thread, ou bien autre chose plus ou moins propre (comme utiliser la console en mode caractère-par-caractère, ce qui permet d'utiliser la fonction d'attente dessus...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Points : 65
    Points
    65
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion d'une BD XML en FTP Client
    Par Gregory666 dans le forum Débuter
    Réponses: 2
    Dernier message: 09/08/2013, 13h09
  2. [AC-2007] Conception d'une base de donnée client
    Par Gregk84 dans le forum Modélisation
    Réponses: 15
    Dernier message: 16/06/2011, 09h09
  3. Réponses: 3
    Dernier message: 14/10/2010, 16h29
  4. Conception d'un client FTP
    Par Orlyn dans le forum Débuter
    Réponses: 3
    Dernier message: 28/04/2010, 11h20
  5. Aide pour conception d'une sorte de "jeu" :)
    Par juzii dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 05/08/2009, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo