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/Web Python Discussion :

serveur / client envoyer les caractères en temps réél


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut serveur / client envoyer les caractères en temps réél
    Bonjour à tous.

    J'ai établie des scripts de connexion client / serveur.
    Tout fonctionne très bien, cependant pour les besoins de mon application, les caractères "\r \n" doivent êtres considérés comme n'importe quels caractères.
    Mon problème est donc le suivant :
    Je veux que chaque caractère tapé côté client soit envoyé instentanément côté serveur, autrement dit, je ne veux pas à avoir à taper sur la touchée Entrée pour que ce que j'ai tapé soit envoyé.
    Si vous avez queques idées ...
    Merci d'avance,

    Xeneize

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,
    A mon sens les échanges client/serveur sont ici accessoires: votre soucis est de lire au fur et à mesure les caractères tapés sur le clavier.
    Voir peut être du côté des bibliothèques termios ou tty mais n'oubliez pas non plus qu'en faisant cela il faudra sans doute traiter des fonctions d'éditions (les actions de BS/^H/...)
    Bon courage
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,
    A mon sens les échanges client/serveur sont ici accessoires: votre soucis est de lire au fur et à mesure les caractères tapés sur le clavier.
    Voir peut être du côté des bibliothèques termios ou tty mais n'oubliez pas non plus qu'en faisant cela il faudra sans doute traiter des fonctions d'éditions (les actions de BS/^H/...)
    Bon courage
    - W
    Merci, je vais me pencher sur les deux librairies.
    Qu'entendez-vous par fonctions d'éditions ?
    merci d'avance.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Re,

    Citation Envoyé par xeneize Voir le message
    Merci, je vais me pencher sur les deux librairies.
    Qu'entendez-vous par fonctions d'éditions ?
    merci d'avance.
    La "console" lit les commandes ligne par ligne.
    Une ligne étant définie par se termine par CRLF.
    Avant d'envoyer la ligne vous pouvez "corriger" ce que vous avez déjà tapé: le driver de saisie inclut des fonctions d'édition.
    Si vous dites: "je veux recevoir les caractères au fur et à mesure", vous êtes en conflit avec le driver de saisie... Et aurez à coopérer ou suppléer pour réaliser vos lectures.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse.

    J'ai cherché dans les deux modules que vous m'avez proposé, mais je n'ai rien trouvé de concluant ...

    dans mon cas, pour être plus précis, mes fonctions d'envoi et de reception de message sont
    socket.send() et sokcet.recv(), qui sont chacun dans une boucl infinie (serveur ininterrompu)

    n'y a t'il pas un réglage ou un paramètre à fixer sur ces fonctions ?
    Je débute en Python, une aide ou uné reponse serait très appreciée !!

    Merci d'avance.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Re

    n'y a t'il pas un réglage ou un paramètre à fixer sur ces fonctions ?
    socket.send ou socket.receive ne feront qu'expédier les caractères lus au clavier. Si vous voulez expédier (via socket.send) les caractères au fur et à mesure qu'ils sont tapés/entrés, le préalable est de les lire.

    Cette lecture concerne les interactions entre le clavier, son driver, l'OS et votre programme. Elle est indépendante des échanges effectués "après" (entre vos programmes et TCP/IP) avec socket.send ou socket.receive.
    Il n'y a donc aucun paramètre magique à positionner.
    Par contre, sachant cela, vous pourriez reformuler vos besoins:

    cependant pour les besoins de mon application, les caractères "\r \n" doivent êtres considérés comme n'importe quels caractères.
    Mon problème est donc le suivant :
    Je veux que chaque caractère tapé côté client soit envoyé instentanément côté serveur, autrement dit, je ne veux pas à avoir à taper sur la touchée Entrée pour que ce que j'ai tapé soit envoyé.
    Pour échanger "n'importe quel caractère" entre clients et serveur, qu'apporte lire caractère par caractère plutôt que ligne par ligne?


    Je débute en Python, une aide ou uné reponse serait très appreciée !!
    Vos questions portent sur de la programmation système ou réseau sont indépendantes du langage de programmation: vous auriez les mêmes soucis en C, en Fortran, en Java,...
    Bon courage
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse détaillée.
    Cependant la lecture ligne par ligne ne m'interesse pas vraiment dans mon cas.
    Je vous explique rapidement :

    Mon serveur via différents thread pourra accepter des connexions sur 2 ports différentts ( et donc 2 sockets) : les clients "machines" et les clients "utilisateurs".

    Cepedant quelque soit le type de client, le programme va fonctionner de façon autonome (en relation avec une machine distante à laquelle j'accéderais via une connexion GPRS).
    Je ne sais donc pas si l'on va m'envoyer, un deux, dix, 300 caractères, ni si ceux si contiendront \r ou \n
    Il est possible que la chaine de caratère ne se compose que de 10 \n par exemple ...

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Pourquoi me parlez vous d'échange de messages au dessus de TCP/IP GPRS alors que nous parlions de saisie de caractères tapés par un humain sur son clavier?
    Hormis le fait qu'il s'agisse de "fonctionnalités" que devra réaliser votre code, elles sont indépendantes et leur mise en relation se fera par des points bien définis.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Je me suis mal exprimé, et ai finalement trouvé d'ou venait le problème : du côté "client", j'entrais un string via "raw_input" qui attends un retour à la ligne pour "terminer" le string, et donc par la suite l'envoyer, puisque dans mon code j'utilise :
    msg = raw_input()
    socketUtil.send(msg)

    Mon problème est donc résolu, puisqu'en passant en mode console, en lieu et place du programme, cela fonctionne.

    Cependant, la fonction input(), qui elle n'attend pas un retour à la ligne attend un int et non un string.
    J'ai essayé de passer par :
    msg = str(input())
    mais aucun résultat.
    N'avez vous pas une idée pour résoudre mon problème ?
    Merci d'avance.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Si votre problème est résolu, j'en suis heureux pour vous car je n'ai pas compris les explications.

    input() équivaut à eval(raw_input('prompt'))

    Heu? le problème précédent a-t-il été résolu ou essayez vous encore de le traiter en remplaçant raw_input par input?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Non je suis encore en tarin de le traiter.
    Mon but est qu'à l'endroit de mon code ou j'ai actuellement

    msg = raw_input()

    cela devienne quelque chose de similaire à

    msg = input()

    de fait, je cherche juste une methode qui lit chaque caractère, sans forcement attendre un retour à la ligne comme raw_input

  12. #12
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Dites, je viens de tilter sur un détail.

    TPC ne garanti en aucun cas que les données seront envoyées instantanément, pour des raisons évidentes de performances.
    Mettons que vous arriviez à lire au clavier un caractère à la fois (ce à quoi readline peut vous aider si vous êtes sous linux, et "mscrt" ou un truc du style sous win), un send() d'un seul caractère pourrait ne pas être transmis directement.

    À moins que vous ne définissiez le flag PUSH (qui est peut-être socket.TCP_NODELAY, je vous laisse faire cette recherche), ce qui forcerait TCP à envoyer immédiatement les infos.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Bonne remarque.

    J'espère qu'elle permettra à l'auteur de comprendre que lire des caractères sur un clavier et en faire des messages expédiés à travers TCP/IP sont deux activités découplées et il est bon qu'elles le restent.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci !
    J'ai bien compris le principe, c'est juste que je me suis en effet très mal exprimé, veuillez m'en excuser.
    Quand au flag socket, il me semble que c'est une voie à suivre, cela me parait très interessant !

    Merci beaucoup pour votre patience et vos réponses qui m'ont été précieuses

Discussions similaires

  1. Réponses: 19
    Dernier message: 03/01/2007, 14h49
  2. [debutant][Client-serveur] Question sur les sockets
    Par skwi6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/11/2006, 15h04
  3. Serveur/Client UDP: comment envoyer un fichier avec mon code
    Par danje dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 21/12/2005, 14h54
  4. Réponses: 1
    Dernier message: 30/05/2005, 17h02
  5. Socket:Envoyer du texte d'un serveur vers tout les clients
    Par cedm78 dans le forum Web & réseau
    Réponses: 7
    Dernier message: 01/08/2002, 16h40

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