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

 C Discussion :

[client tcp] Fonctions write et send qui n'interpretent pas les retours à la ligne


Sujet :

C

  1. #1
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut [client tcp] Fonctions write et send qui n'interpretent pas les retours à la ligne
    Bonjour;

    J'ai écrit un client tcp qui fonctionne (données reçues par un serveur en perl). Les données se transmettent correctement, mais tout ce qui est après un \n ou \r ne se transmet pas.
    Le retour à la ligne a bien lieu, mais les données suivantes ne sont pas transmises :-S

    Voici un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /* envoie de donne et reception */
    	char *msg = "tyty\ntata";
    //	write(to_server_socket, "%s", msg ,4);
    	write(to_server_socket, msg, strlen(msg));
    //	send(to_server_socket, msg, 4, 0);
    	read(to_server_socket,buffer,512);
    	printf(buffer);
    	/* fermeture de la connection */
    	shutdown(to_server_socket, 2);
    	close(to_server_socket);
    Le code complet ICI pour pas pourrir le post.

    Merci pour votre aide!
    ZORRO
    Plus Vengeur que Masqué

  2. #2
    Membre actif Avatar de Balbuzard
    Profil pro
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 263
    Points
    263
    Par défaut
    J'ai pensé un moment que le problème pouvait venir du serveur, mais avec telnet ou netcat, quand je me connecte sur le serveur et que j'envoie des instructions, je n'ai pas ce soucis, (même si le \n n'est pas interprété, il est au moins affiché et ce qui suit aussi). Avec mon client en C, il est interprété mais la suite n'est pas affichée.

    J'ai créé un entier pour récupérer le code de retour de la fonction write (int result = write...) qui m'affiche le nombre de caratère complet (avec \n comptant pour un caractère).
    Quelqu'un aurait une piste?
    Merci!
    ZORRO
    Plus Vengeur que Masqué

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Essaye peut-être '\r\n',
    Plus d'info sur Wikipédia.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    A quoi vois-tu que les retours à la ligne posent problème ? Autrement dit, quels sont les symptômes exacts ?

    Il y des chances que le "problème" soit dans le serveur, ou une mauvaise compréhension du fonctionnement du serveur.

    En passant, et d'ailleurs il n'est pas impossible que le problème vienne de là, quand tu fais un write() tu ne peux pas supposer que toutes les données ont été écrites en un appel. write() écrit ce qu'il peut, et te renvois en retour le nombre d'octets qui ont effectivement été écrits. C'est à toi de faire un boucle pour faire enchainer les write() jusqu'à ce que la totalité des données à écrire aient été écrites.

    Même chose pour read(), rien ne te garantit que tu peux lire en une fois les données attendues. Là encore read() te retourne le nombre d'octets effectivement lus, et c'est à toi de faire une boucle pour continuer à lire jusqu'à ce que toutes les données aient été lues.

    En gros il n'est presque jamais correct de faire un seul write() ou un seul read(). Ces deux fonctions doivent généralement être utilisées dans une boucle. Et leur retour doit être testé. Toujours.

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/09/2008, 21h56
  2. Fonction javascript qui n'effectue pas les actions demandées
    Par Joe-La-Boule dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/06/2008, 15h27
  3. [MySQL] Fonction qui ne convertit pas les balises html
    Par tintin72 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/10/2007, 20h54
  4. resultat de la fonction ajdate qui ne respecte pas les critères
    Par alassanediakite dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 02/09/2007, 00h07
  5. Réponses: 10
    Dernier message: 07/01/2007, 12h03

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