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 :

Serveur/client TCP --> Vous en pensez quoi ?


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Points : 69
    Points
    69
    Par défaut Serveur/client TCP --> Vous en pensez quoi ?
    Bonjour bonjour,

    J'ai un mini-projet de réseau. Il s'agit de faire un client/serveur en TCP.
    J'aimerais avoir votre avis, ce que vous en pensez et si il y a des choses à améliorer.

    Commençons par le serveur :

    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
    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <netinet/in.h>
    #include <stdlib.h>
     
    //Fonction permettant l'affichage de l'utilisation du programme
    void usage(){
    	printf("projet_serveur :\n\nUSAGE\t\t: ./serveur numeroPort nomNouveauFichier \n\nnumeroPort \t\t- numero du port \nnomNouveauFichier  \t- nom du fichier de sauvegarde\n");
    }
    int main(int argc,char *argv[]){
     
    	if(argc != 3){
    		usage();
    		exit(0);
    	}
     
    	char mess_recu[BUFSIZ],mess_envoi[BUFSIZ];
    	int  pp,d_sock,cc,l,n,m,i;
    	int longe,service;
    	char tab[128];
     
    	int nb=128;
    	char buffer[nb];
     
    	//le decalage du chiffrement de cesar
    	int decalage = 5;
     
    	struct sockaddr_in serveur = {AF_INET};
    	struct sockaddr_in client;
     
    	/* le numero de port */
    	int numport;
    	char *p_conv = NULL;
    	numport = (int)strtol(argv[1],&p_conv,10);
     
    	serveur.sin_port=numport; /* numero de port */
    	serveur.sin_family=AF_INET;
    	serveur.sin_addr.s_addr=INADDR_ANY;
    	d_sock=socket(AF_INET,SOCK_STREAM,0); /* procole TCP */
    	if(d_sock<0){
    		perror("Erreur a la creation de socket");
    		exit(0);
    	}
     
    	pp=bind(d_sock,(struct sockaddr*)&serveur,sizeof(serveur));
    	printf("serveur pret\n");
     
    	l=listen(d_sock,1);
    	longe=sizeof(struct sockaddr_in);
    	service=accept(d_sock,(struct sockaddr *)&client,&longe);
    	printf("accept= %d\n",service);
     
    	/*reception du message et creation du nouveau fichier */
    	int fd = creat(argv[2],0755);
    	n=read(service,buffer,nb);
    	if(n<0){
    		perror("Impossible de lire le fichier");
    		exit(0);
    	}
     
    	//pour chaque caractere du fichier, tant que le buffer a quelque chose, on applique le déchiffrement de cesar sur le buffer
    	//autrement dit, on decale chaque lettre dans le sens inverse du chiffrement à l'aide du décalage précédemment défini
    	i=0;
    	while(buffer[i]!='\0'){
    		buffer[i]=buffer[i]-decalage;
    		i++;
    	}	
     
    	//on ecrit dans le nouveau fichier
    	while(n>0){
    		m=write(fd,buffer,n);
    		if(m<0){
    			perror("Impossible d'ecrire dans le fichier");
    			exit(0);
    		}
    		n=read(service,buffer,nb);
    	}
    	printf("\a"); //Fais un joli bip système pour dire que le fichier est recu.
    	printf("---------------Fichier recu----------------\n");
    	//On ferme la socket, ainsi que le descripteur de fichier
    	close(d_sock);
    	close(fd);
    }
    Et le client :

    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
    #include <stdio.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdlib.h>
     
    //Fonction permettant l'affichage de l'utilisation du programme
    void usage(){
    	printf("USAGE :\t ./client fichierAtransferer nomMachine numeroPort \n\nfichierAtransferer\t- Fichier a transferer\nnomMachine\t\t- nom du serveur\nnumeroPort \t\t- numero du port \nnomNouveauFichier  \t- nom du fichier de sauvegarde\n");
    }
    int main(int argc,char *argv[]){
     
    	if(argc != 4){
    		usage();
    		exit(0);
    	}
     
    	struct sockaddr_in serveur;
    	struct hostent *hp;
    	char mess_recu[BUFSIZ], mess_envoi[BUFSIZ],tab[128];
    	int  sock,cc,errno,i,j,n,l,d_sock,m;
    	int longe,service;
    	int nb=128;
    	char buffer[nb];
    	int taille;
     
    	//le decalage du chiffrement de cesar
    	int decalage = 5;
     
    	/* le numero de port */
    	int numport;
    	char *p_conv = NULL;
    	numport = (int)strtol(argv[3],&p_conv,10);
     
    	hp=gethostbyname(argv[2]); /* adresse IP du serveur */
    	memcpy(&serveur.sin_addr,hp->h_addr,hp->h_length);
    	serveur.sin_port=numport; /* numéro de port */
    	serveur.sin_family=AF_INET;
    	sock=socket(AF_INET,SOCK_DGRAM,0); /* protocole TCP */
    	if(sock<0){
    		perror("Erreur a la creation de socket");
    		exit(0);
    	}
     
    	l=connect(sock,(struct sockaddr *)&serveur,sizeof(serveur));
     
    	/* fichier que l'on veut transferer */
    	int fd = open(argv[1],0);	//ouverture du fichier
    	n=read(fd,buffer,nb);
    	if(n<0){
    		perror("Impossible de lire le fichier");
    		exit(0);
    	}
     
    	//pour chaque caractere du fichier, tant que le buffer a quelque chose, on applique le chiffrement de cesar sur le buffer
    	//autrement dit, on decale chaque lettre à l'aide du décalage précédemment défini
    	i=0;
    	while(buffer[i]!='\0'){
    		buffer[i]=(buffer[i]+decalage);
    		i++;
    	}
     
    	//on transmet le fichier
    	while(n>0){
    		cc=write(sock,buffer,n);
    		if(cc<0){
    			perror("Impossible d'ecrire dans le fichier");
    			exit(0);
    		}
    		n=read(fd,buffer,nb);
    	}
     
    	printf("---------------Fichier envoye----------------\n");
    	close(sock);
    	close(fd);
    }
    Voilà ! Qu'est ce que vous en pensez ?
    Est-ce qu'il y aurait beaucoup de modification pour lui permettre de faire de l'UDP ?

    Cordialement,
    shepounet

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Points : 59
    Points
    59
    Par défaut
    J'ai lu ton code en diagonale (vraiment en diagonale), pour l'améliorer peut être controlé les arguments passés à ton programme.

    Pour ce qui est de l'UDP, regarde ici : http://broux.developpez.com/articles/c/sockets/#L3
    tu pourras ajouter un argument (-tcp ou -udp)
    Par contre l'udp ne fait de controle sur la reception des paquets, peut etre envoyer un checksum pour verifier que tout les paquets sont arrivés et le faire vérifier par ton programme.
    Y'a aussi une section sur les sockets windows dans le lien ci dessus, tu pourras l'utiliser pour ajouter le support des sockets pour windows aussi...

    J'ai pas d'autres idées ...

Discussions similaires

  1. [Cinéma][X-Men 3] Vous en pensez quoi ?
    Par Baptiste Wicht dans le forum Films & TV
    Réponses: 79
    Dernier message: 26/11/2006, 18h49
  2. [Mulholland drive] Vous en pensez quoi ?
    Par Médiat dans le forum Films & TV
    Réponses: 19
    Dernier message: 13/08/2006, 10h59

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