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 :

problème au cours de la lecture de la socket


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut problème au cours de la lecture de la socket
    je suis pour la manipulation des vsockets et j'ai rencontrés plusieurs problémes tels que les problème suivant :
    le programme exit et je ne sais pas pouquoi .
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #ifdef HAVE_CONFIG_H
    # include "config.h"
    #endif
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/un.h>
    #include <errno.h>
    #include <getopt.h>
    #define VERSION			"0.0.0"
    #define DEVDIR			"/dev"
    #define DEV_LIRCD	"lircd"
    #define LIRCD			DEVDIR "/" DEV_LIRCD
    static struct option long_options[] =
    {
    	{"help", no_argument, NULL, 'h'},
    	{"version", no_argument, NULL, 'v'},
    	{0, 0, 0, 0}
    };
    
    int main(int argc,char *argv[])
    {
    	int fd,i,inc, keyRet, run = 1;
    	char buf[128],buf_copy[128], oldKey[128], dis[100];
    	struct sockaddr_un addr;
    	int c;
    	char *progname, *pch;
    
    	progname="irw " VERSION;
    
    	addr.sun_family=AF_UNIX;
    
    	strcpy(addr.sun_path,LIRCD);
    
    	fd=socket(AF_UNIX,SOCK_STREAM,0);
            printf("déclaration de la socket\n");
    	if(fd==-1)  {
    		perror("socket");
    		exit(errno);
    	};
    	printf("le fd est %d",fd);
    	if(connect(fd,(struct sockaddr *)&addr,sizeof(addr))==-1)  {
    		perror("connect");
    		exit(errno);
    	};
    	printf("avant memeset \n");
    	memset(oldKey, sizeof(oldKey), 0x00);
    	printf("avant la boucle\n");
    	while(run)
    	{
    		
    		i=read(fd,buf,128);
    		if(i==-1)
    		{
    			perror("read");
    			exit(errno);
    		};
    
    		if(!i)  exit(0);//*le programme exit à ce point est i une valeur négative trés grande est ce que vous 								avez une explication merci*/
    		
    		//Parser le buf;
    		memset(buf_copy, sizeof(buf_copy), 0x00);
    		strcpy(buf_copy, buf);
    		pch = strtok (buf_copy," ");
    		inc = 1;
    		while (pch != NULL)
    		{
    			inc++;
    			pch = strtok (NULL, " ");
    			sprintf(dis, "inc = %d  ;  pch = %s\n", inc, pch);
    			if (inc == 3)
    			{
    				sprintf(dis, "inc = %d  ;  pch = %s\n", inc, pch);
    				write(STDOUT_FILENO,dis,strlen(dis));
    			}
    			
    		}
    
    		};
    }
    Important :
    fd = 3 ;
    connexion = 0 ;;;donc établie
    i= valeur négative trés grande

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut
    execuser moi , en faite la valeur de i est 0

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Citation Envoyé par kris1 Voir le message
    execuser moi , en faite la valeur de i est 0
    Le test réalisé if (!i) est équivalent à if (i==0) => il est normal d'exécuter le "exit".

    Personellement je préfère les syntaxes suivantes pour éviter ce genre d'erreurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (i != 0) ou if (i == 0)

  4. #4
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    bon, ce je ne comprend pas c'est comment il a passer le premier "if", puisque read() ne retourne que des valeur positif en cas de succés, ou -1 en cas d'erreurs...

    ce que je vous demande' c'est d'ajouter un affichage de "errno" pour savoir exactement c quoi l'erreur : s'il y a une vraiment .....

  5. #5
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    dans ce cas, le descripteur de fichier est arrivé à la fin, il n'a rien lue ....

    Est ce que il y a un serveur qui va utiliser la même socket ?

  6. #6
    Expert éminent
    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
    Par défaut
    Citation Envoyé par kris1 Voir le message
    je suis pour la manipulation des vsockets et j'ai rencontrés plusieurs problémes tels que les problème suivant :
    le programme exit et je ne sais pas pouquoi .
    Ën dehors des problèmes évoqués, et comme dans 90% du code 'socket', ceci est faux :
    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       i = recv (fd, buf, sizeof buf - 1, 0);
       if (i > 0)
       {
          buf[i] = 0;
          /* traitement normal de buf */
       }
       else
          /* cas d'erreurs */
    J'ai mis recv() pour être portable, mais read() convient dans le monde unixoide...

    http://emmanuel-delahaye.developpez....eaux.htm#texte

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut
    en faite qu'est ce que signifie si on a i= 0 est ce que le faite qu'on a pas recu aucune donnée ou quoi merci
    parceque quand j'execute ce prg il exite puisque i = 0 .
    merci de m'éclertir ce point

  8. #8
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par kris1 Voir le message
    en faite qu'est ce que signifie si on a i= 0 est ce que le faite qu'on a pas recu aucune donnée ou quoi merci
    parceque quand j'execute ce prg il exite puisque i = 0 .
    merci de m'éclertir ce point
    recv() te renvoie le nombre d'octets lus, ou -1 en cas d'erreur.

    Si recv() te renvoie 0, generalement c'est que la socket a ete fermee proprement de l'autre cote.
    Tu peux donc la fermer de ton cote, et passer a autre chose.

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 132
    Par défaut
    qu'elle pourrait etre la cause de la fermeture . Puisque je ne veut qu'elle se ferme .

  10. #10
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par kris1 Voir le message
    qu'elle pourrait etre la cause de la fermeture . Puisque je ne veut qu'elle se ferme .
    Generalement un close()/closesocket() de l'autre cote.

Discussions similaires

  1. Problème de retour à la ligne. Lecture fichier.
    Par haile dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/12/2008, 17h27
  2. Problème de suppression : Table en lecture seule
    Par DashRendar dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/11/2007, 13h27
  3. Réponses: 1
    Dernier message: 02/07/2007, 15h57
  4. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 09h31
  5. Problème : Clé USB verrouillé en lecture seul
    Par kaouane dans le forum Périphériques
    Réponses: 1
    Dernier message: 19/06/2006, 16h25

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