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 :

[Code Prof]votre avis sur un code?


Sujet :

Réseau C

  1. #1
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut [Code Prof]votre avis sur un code?
    voila ...
    mon prof d'Info (j'ai caché son nom au cas ou :p) as donné un code (fin 2 codes, un client et un server) et j'aurais aimé avoir votre avis, savoir si c'est moi qui rale pour rien ...

    j'ai mis mes commentaires ... (non exhaustif)

    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
    87
    88
    89
    90
    91
    92
    93
    /* By: *censored* Created: 04/03/05 10:39:32 */
    /* client2.c */
     
    /* Exemple 2 Client s'appuyant sur TCP */
     
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <strings.h>
    #include <unistd.h>
    // DE : il manque des include pour les sockets et pour sleep.
    #define DATA "hello, je suis ton premier client, teste si tu me copies correctement !"
    #define MESS "\n reading message"
    /* Usage: pgm host port nbmss pause*/
     
    //DE : le code date de 2005 ...
    main( argc,argv )
    int argc;
    char *argv[];	
    {
     
    	int sock;
    	struct sockaddr_in server;
    	struct hostent *hp;
    	int rval,nbmss;
    	char buf[292],c='-',i;
     
     
    if (argc != 5){
    	printf("usage: client2 host port nbmss pause \n");
    	exit(1);
     } 	
     
     
    	/* Create Socket */
    	//DE: on confond allegrement AF_INET et PF_INET
    	sock = socket(AF_INET, SOCK_STREAM, 0);
     
       if (sock == -1) {
          perror("opening stream socket");
          exit(1);
       }
     
    	/* Connect socket */
    	//bzero  : fonction deprecié.
    	bzero(&server, sizeof(server));
    	server.sin_family = AF_INET;
    	hp = gethostbyname(argv[1]);
    	if (hp == (struct hostent*) 0) {
                    //DE: pour gethostbyname, on utilise herror generalement.
                    //DE: semblerait que herror existe pas sous windows. j'ai rien dis :p
    		fprintf(stderr, "%s: unknown host\n", argv[1]);
    		exit(2);
    	}
            //DE: bcopy: fonction depreciée non?
    	bcopy(hp->h_addr,&server.sin_addr.s_addr,hp->h_length);
            //DE: atoi c'est pas deprecié? (ironique)
    	server.sin_port = htons(atoi(argv[2]));
    	if (connect(sock, (struct sockaddr*) &server, sizeof(server)) == -1) {
    		perror ("connecting stream socket");
    		exit(1);
    	}
            //DE: on utilise write: pas portable ... send ca aurait ete tellement plus elegant !
    	if (write(sock, DATA, sizeof(DATA)) == -1)
    		perror("writing on stream socket");
    		memset(buf, 0, sizeof (buf));
                    //DE: meme remarque que pour write.
    		rval=read(sock, buf, sizeof (buf));
    		if (rval == -1)
    			perror("reading string message");
    		write(1,buf,rval);
                    //DE: *edit* j'ai rien dis :X
    		nbmss=atoi(argv[3]);
    		write(sock, &nbmss, sizeof(nbmss));
    		write(1,MESS,sizeof(MESS));
    		do {
    		   rval=read(sock, buf, sizeof (buf));
    		if (rval == -1)
    			perror("reading string message");
    		for (i=1;i<=atoi(argv[4]);i++){
                           //DE: ca semble etre la maniere la plus elegante qu'il ait trouvé pour afficher des '-' sur la console.
    			sleep(1);
    			write(1,&c,1);
    			}
     
    		}while(rval>0);
    	printf("\n closing socket \n");      
    	close(sock);
    	exit(0); //DE: j'aurais aimé un beau return EXIT_SUCCESS;
    }
    voila, si vous avez d'autres remarques ...
    y'as aussi le server qui vas avec ... que j'ose pas poster ...

    nota: si je suis intransigent et que je devrais y voir autre chose qu'un code 'pas a jour' ... dites le moi.

  2. #2
    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 Re: [Code Prof]votre avis sur un code?
    Citation Envoyé par Dark_Ebola
    j'ai mis mes commentaires ... (non exhaustif)

    voila, si vous avez d'autres remarques ...
    y'as aussi le server qui vas avec ... que j'ose pas poster ...

    nota: si je suis intransigent et que je devrais y voir autre chose qu'un code 'pas a jour' ... dites le moi.
    Il y a aussi le exit(1) au lieu de exit(EXIT_FAILURE). Mais comme ça semble être du code pré-ANSI, ça reste cohérent...

    Plus grave, le bug classique sur read(). On passe la taille totale du buffer, ce qui fait qu'il n'y a pas de place pour mettre le 0 final si le buffer est plein : Chaine malformée, comportement indéfini.

    Mais je vois ça tellement souvent que je ne suis plus surpris...

    Tout ce qu'on peut dire, c'est que c'est du vieux code. Il n'est pas normal qu'un prof ne connaisse pas C90 en 2005 (je ne parle même pas de C99).

    Le problème de la plupart des profs, c'est qu'ils ne maitrisent pas assez le sujet pour écrire le code eux-même. Ils ne prennent donc aucun risque, et un code 'qui marche' est un bon code, point. Même si il n'est plus aux normes...

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    bzero() et bcopy() ne sont pas standard non plus, il faut utiliser memset() et memcpy()

  4. #4
    zul
    zul est déconnecté
    Membre chevronné Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par défaut
    on peut aussi rajouter le write(1, ... ) à la place de write(stdout, ... );
    l'utilisation de define inutile ( quelle intéret d'utiliser le preprocesseur pour DATA et MESS ) ?

    Enfin un problème un peu plus subtile : il envoie un entier par le réseau, sans prendre de précaution sur sa taille ( tout le monde sait que tous les int du monde sont sur 32 bits ), ni sur l'endianess ( tout le monde sait que toutes les machines ont le même endianess ).

    Utilisation inconsistente de rval
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    rval=read(sock, buf, sizeof (buf));
          if (rval == -1)
             perror("reading string message");
          write(1,buf,rval);
    Si rval == -1; je penche pour un méchant comportement indéfini ( le -1 converti en size_t, ca fait toujours mal ).

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Et ca donne quoi avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -Wall -ansi -pedantic fic.c -o fic
    Bien que d'après Emmanuel le code soit pre-ANSI.

    Essai de lui rendre une nouvelle version ANSI

  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 Skyrunner
    Et ca donne quoi avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -Wall -ansi -pedantic fic.c -o fic
    Ca va iéch...

  7. #7
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    ah, j'avais pas vut pour le rval .

    bon, bah heuresement que je frequente le forum ... sinon je pondrais ptetre le meme genre de codes ... qui sait (j'ai un bouquin aussi ... mais j'ai jamais reussi a le lire en entier, je lis des passages ... puis je reviens dessus ... fin, vais pas raconter ma vie non plus ...)

    [mode psychanalyse:on] j'avais besoin de trouver des gens pour me conforter a camper sur mes positions [/mode psychanalyse:off]

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

Discussions similaires

  1. Votre avis sur mon code
    Par Schopenhauer dans le forum Fortran
    Réponses: 4
    Dernier message: 04/05/2011, 15h12
  2. Votre avis sur mes codes
    Par herzak dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2011, 11h41
  3. [XL-2003] Votre avis sur mon code en VBA ?
    Par [ZiP] dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2010, 13h56
  4. MAX_CONNECTIONS: votre avis sur ce code
    Par Zartan dans le forum Administration
    Réponses: 2
    Dernier message: 31/01/2010, 04h34
  5. [FFT] Votre avis sur mon code
    Par deubelte dans le forum C++
    Réponses: 1
    Dernier message: 10/02/2007, 20h14

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