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 :

probleme lecture dans un socket


Sujet :

Réseau C

  1. #1
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    Par défaut probleme lecture dans un socket
    bonsoir bonsoir

    Voila j ai un probleme de lecture d un socket.Je vais expliquer le principe de mon programme meme si je sais que la m aider va etre difficile
    -J ai un serveur qui attend la commande d un client
    -une fois que le client envoie la commande le serveur verifie son existence dans une liste qu il a chargé.
    -si la commande n existe pas il envoie un signal au client pour qu il affiche que la commande n existe pas.
    -si elle existe il envoie au client la position de la commande dans la liste pour effectuer l operation correspondante.


    La saisi et l envoie de la commande par le client marche bien.
    Si le client envoie une commande fausse le serveur est capable de lui envoyer le signal qui indique que la commande n existe pas.

    la ou ça pose probleme c est quand la commande existe.
    le client n arrive pas à lire la position de la commande .J utilise un read.

    Je ne peux pas mettre le code entier tout est separé dans des fichier differents mais je vais mettre la partie qui bloque au cas ou

    client.c
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    int  rw;
    int boucle=0;
    char comand[10];
    char message[1024];
    char buf[1];
    int rcom;
    while(boucle==0)
    {
     
     
    	printf("client>");
    	scanf("%s",&comand);
    	printf("%s\n",comand);
    	rw=write(sockfd,comand,10);
    	if(rw==-1)printf("erreur ecriture\n");
    bzero(&comand,0);
    	lg=read(sockfd,message,1024);
    	if(lg==-1)printf("erreur\n");
     
    rcom=strcmp(message,"fault");
    	bzero(&message,0);
    	if (rcom==0)
    	{
    		printf("la commande n existe pas \n");
    	}
    	else
    	{
     
     
    		printf("on rentre dans else\n");
    		bzero(&buf,0);
    		printf("pn va lire");
    		lg=read(sockfd , buf , 1); 
                  //le programme s arrete ici il ne lit pas et ne me signale pas d erreur
    		if(lg==-1)printf("erreur\n");
    		printf("%d\n",lg);
    		printf("on a lu\n");
     
    		printf("%s\n" , buf);
    		//bufconv=strtol(buf ,NULL ,10);
    		//printf("%d\n" , bufconv);
    		//switch(bufconv)
    	}	
     
     
    }
     
    close(sockfd);
     
    }
    serveur.c
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    char comand[10];
    char buf[1];
    char message[1024];
    int boucle=0;
    int res;
    int rw;
    pile *com;
    while(boucle==0)
    {	
    	printf("on rentre dans la boucle\n");
    	lg=read(sock_com,comand,10);
    	if (lg==-1)printf("erreur lecture\n");
            res=recherche(com,comand);
    	if (res==0)
    	{
    		strcpy(message,"fault");
    		write(sock_com,message,1024);
    	}		
    	else
    	{
    		printf("on rentre else\n");
    		printf("%d\n",res);
    		bzero(&buf,0);
    		sprintf (buf "%d",res );
     
    		printf("%s\n",char);
    		rw=write(sock_com,buf,1);
    		if (rw==-1)
    		{
    		printf("erreur ecriture\n");
     
    		}
    		printf("on à ecrit\n");	
    }
     
     
     
    }
     
     
    close(sock);
     
    }
    alors je n ai pas fini le programme puisque qu il n y a pas la sortie de boucle.

    Le probleme se situe au niveau du client avec le dernier read.La le client ne fait plus rien et n affiche pas ce qu il y a en dessous

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sneb5757
    Voila j ai un probleme de lecture d un socket.<...> Le probleme se situe au niveau du client avec le dernier read.La le client ne fait plus rien et n affiche pas ce qu il y a en dessous
    Je n'ai pas lu le code en détail, mais je rappelle 2 principes fondamentaux :

    (par ailleurs exposés ici : http://emmanuel-delahaye.developpez.com/reseaux.htm)

    Envoyer du texte par un socket :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
       int n = send (sock, text, strlen (text), 0); /* pas de 0 en ligne */
       if (n >= 0)
       {
          /* debug */
          printf ("%d byte%s sent\n", n, n != 1 ? "s" : "");
       }
    recevoir ce qui a été envoyé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       char text[128]; /* taille arbitraire */
       int n = recv (sock, text, sizeof text - 1, 0);
       if (n > 0)
       {
          text[n] = 0;
     
          /* debug */
          printf ("received : '%s'\n", text);
       }
    Hors de ce principe, rien de fonctionne. De plus, il est d'usage que les textes transmis se terminent par un fin de ligne ("\n" ou "\n\r" etc.). Ca sert à la synchronisation en réception si l'émission a du être découpée d'une façon ou d'une autre.

  3. #3
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    Par défaut
    oui ça avait l air d etre ça ça debloque.Mais le probleme maintenant c est qu une fois que le client a envoyé sa premiere commande le serveur en reçoit 4.

    exemple si le client envoie quit(j ai verifier et il envoie bien quatre bytes)

    alors le serveur reçoit:
    on rentre dans la boucle
    received : 'quit'
    on à ecrit
    on rentre dans la boucle
    received : 'quit'
    on rentre dans la boucle
    received : '¿'
    on rentre dans la boucle
    received : '$_'
    on rentre dans la boucle

  4. #4
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    Par défaut
    en faite tout depend de l option du flag.ce qui est dommage c est que l option de la page que tu donnes en exemple est a 0 et je comprend pas trop pourquoi.
    je dois changer de sectiond e forum pour ce probleme?

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sneb5757
    en faite tout depend de l option du flag.ce qui est dommage c est que l option de la page que tu donnes en exemple est a 0
    Tu parles de quoi ? Quel flag ? Quel page ? Apprends à utiliser le bouton .

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sneb5757
    oui ça avait l air d etre ça ça debloque.Mais le probleme maintenant c est qu une fois que le client a envoyé sa premiere commande le serveur en reçoit 4.

    exemple si le client envoie quit(j ai verifier et il envoie bien quatre bytes)

    alors le serveur reçoit:
    Tu as bien suivi mes consignes ? Montre le code corrigé.

  7. #7
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    Par défaut
    je suis passé sous window mais j ai remplacé tous mes "read" par "recv" et tous mes "write" par "send" et j ai essayé plusieurs options pour le flag.
    Je posterai le code demain matin.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sneb5757
    je suis passé sous window mais j ai remplacé tous mes "read" par "recv" et tous mes "write" par "send" et j ai essayé plusieurs options pour le flag.
    Je posterai le code demain matin.
    En l'occurence, Windows, Unix, même combat... Les sockets, c'est send/recv (mode connecté comme TCP) ou sendto/recvfrom (mode datagramme comme UDP) et pas autre chose...

  9. #9
    Membre actif
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Points : 267
    Points
    267
    Par défaut
    oui je sais que les socket c est la meme chose mais ce que je voulais dire par la c est que mes fichier etaient sur la partoche linux.

    sinon j ai resolu mon probleme en faite c etait ma faut mon code n avais aucun sens et pourtant hier soir je l ai lu et relu.Et ce matin en ouvrant le fichier source ça m a sauté tout de suite aux yeux.

    merci pour tes precisions en tout cas

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

Discussions similaires

  1. Probleme lecture dans un fichier Excel ferme
    Par kent17 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/07/2010, 10h29
  2. Probleme lecture dans la base de registre
    Par olivier93612 dans le forum VB.NET
    Réponses: 4
    Dernier message: 09/06/2010, 16h35
  3. Probleme lecture dans un fichier
    Par Diabolikjo dans le forum Langage
    Réponses: 9
    Dernier message: 11/07/2008, 13h08
  4. [VB.Net 2005] Probleme lecture dans table
    Par angelevil dans le forum Accès aux données
    Réponses: 2
    Dernier message: 13/10/2006, 22h11
  5. Lecture dans le socket
    Par Tex-Twil dans le forum Réseau
    Réponses: 4
    Dernier message: 07/10/2006, 15h39

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