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 :

Application client/serveur: les bases


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    ingénieur informatique
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Par défaut Application client/serveur: les bases
    Je me suis mis en autodicdate sur la programmation réseau en C et avec les sockets. J'essaie d'approfondir en m'attaquant à un petit projet du genre serveur bancaire dont l'essentiel est résumé ci-aprés:
    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
    On considère une application client-serveur pour laquelle les processus clients et les processus serveurs s’exécutent sur des machines différentes.
    L’application serveur est une application de type serveur bancaire.
    1/ Les clients
    Des processus clients émettent deux types de requêtes à destination du serveur bancaire:
    - la requête de consultation permet à un client identifié par son nom, son prénom et un mot de passe, de
    consulter le solde du compte dont il précise l’identifiant A.
    - la requête de virement permet à un client identifié par son nom, son prénom et un mot de passe, de virer une somme depuis un compte A vers un autre compte B, A et B étant les deux identifiants des comptes.
    2/ Le serveur
    Le serveur bancaire est composé de deux services et d’un traitement périodique. Il gère les comptes des clients dans une table placée en mémoire centrale. Il est accessible 24 heures sur 24.
    Les services:
    -Le service Consultation prend en compte les requêtes de consultation. Pour chacune d’elle, il vérifie à l’aide du nom, du prénom et du mot de passe, que le client peut bien accéder au compte dont
    l’identifiant A est fourni dans la requête. Si tel est le cas, il renvoie au client, le solde du compte. Sinon, il renvoie un message d’erreur.
    -Le service Virement prend en compte les requêtes de virement. Pour chacune d’elle, il vérifie à l’aide du nom, du prénom et du mot de passe, que le client peut bien accéder aux deux comptes dont les identifiants A et B sont fournis. Si tel est le cas, il effectue le virement demandé et renvoie au client, les nouveaux soldes des comptes A et B. Si le client n’a pas accès à l’un des deux comptes ou aux deux comptes, le serveur renvoie un message d’erreur. Si le virement rend le solde du compte débité négatif, le serveur n’effectue pas le virement et renvoie un message d’erreur.
    -Le traitement périodique
    Toutes les nuits, à minuit, un traitement périodique est déclenché. Ce traitement lit depuis une file de messages, un ensemble de requêtes déposées depuis sa dernière exécution, par différents organismes financiers. Chaque requête spécifie un nom, un prénom, un numéro de compte et une somme à créditer ou à débiter sur le montant du compte. Le traitement lit chaque requête et exécute l’opération qu’elle contient.
    -La table des comptes
    Les informations concernant les comptes des clients sont stockées dans une table en mémoire centrale.
    Cette table est chargée au moment du démarrage du serveur.
    Une entrée de la table contient les informations suivantes : identifiant du compte, nom, prénom et mot de passe du détenteur du compte, solde du compte.
    Chaque compte a un identifiant différent. C’est une chaîne de caractères composée d’une lettre, 5 chiffres et une lettre.
    Chaque client a un mot de passe différent. Un mot de passe est une chaîne de caractères composée de un chiffre, 3 lettres et un chiffre.
    Est-ce-que quelqu'un peut me servir de guide sur comment on aborde ce genre de projet car je suis totalement perdu.

  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
    Citation Envoyé par doumo Voir le message
    Je me suis mis en autodidacte sur la programmation réseau en C et avec les sockets. J'essaie d'approfondir en m'attaquant à un petit projet du genre serveur bancaire dont l'essentiel est résumé ci-après:
    <...>
    Est-ce-que quelqu'un peut me servir de guide sur comment on aborde ce genre de projet car je suis totalement perdu.
    Il faut travailler en couches, sachant que les sockets permettre d'établir un tuyau de communication de données entre un client et un serveur.

    Après, c'est à toi de définir la couche applicative. En gros, requêtes/ réponses. C'est plutôt simple. Il faut voir aussi l'aspect 'base de données'. Le C est très basique avec ses fichiers. Je conseille une vraie base de données SQL (tout dépend du volume à traiter, du nombre de transactions etc.).

    Il faut que tu fasses une liste des requêtes avec les paramètres possibles. ainsi que les réponses possibles, et que tu formalises ça sous la forme de commandes, soit textuelles, (le plus simple et le plus clair) soit numériques (plus efficace, mais illisible...). Le codage numérique peut être en texte ou en binaire...

    Cet ensemble s'appelle un protocole applicatif. C'est lui qui définit en détail ton application, en terme d'interface client / serveur et de comportement du client et du serveur.

    Une fois ce document au point, on peut envisager de réfléchir à l'architecture logicielle.

    Mais c'est plus une application à faire en PhP + SQL... Le langage C n'est pas adapté à ce type de gros projet. Tu risque de passer des heures à faire des écrans clients atroces en texte alors que ça se fait en quelques lignes de PhP et que ça apparait sur le navigateur en mode graphique pouet pouet et tout... En principe, il n'y a rien à développer coté client. C'est juste une application qui tourne sur le serveur...

  3. #3
    Membre averti
    Profil pro
    ingénieur informatique
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Par défaut
    J'ai essayé d'écrire un pseudo-code pour le serveur est que ED, vous pourriez me corriger svp
    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
     
    /*TRAITEMENT PERIODIQUE*/
     
    struct traitement {
                    char choix; -- 'c' créditer le compte
    			   -- 'd' Débiter le compte	
                   }
     
    main()
    {
    struct trait 
    struct sockaddr_in adr, adr_exp ;
    int sock
    sock = socket (AF_INET, SOCK_DGRAM, 0) ;
    adr = Construit_adresse (INADDR_ANY, PORT2),
    bind (sock, adr, taille(adresse));
    for(;;) {
    	 recvfrom(sock, traitement, taille(traitement), 0, adr_exp, taille(adresse));
             if (trait.choix = = 'c')
                reponse = créditer(compte);
    	 else if (trait.choix = = 'd')
    	    reponse = débiter(compte) ;
    	else 
    	    (Afficher "Mauvais choix entrer 'c' ou 'd'")	
             sendto(sock, reponse, taille(reponse), 0, &adr_exp, taille(adresse));
             }
    }
    /*CONSULTATION ET VIREMENT*/
    struct service {
                    int type; -- 1 Service_Consultation
    			  -- 2 Service_Virement	
                    }
    main()
    {
    struct service serv;
    struct sockaddr_in adr, adr_exp ;
    int sock, socks, lgadr, pid, rep;
    sock = socket (AF_INET, SOCK_STREAM, 0) ;
    adr = Construit_adresse (INADDR_ANY, PORT1),
    bind (sock, adr, taille(adresse));
    listen(sock, 10);
    for(;;) {
      	socks = accept (sock, &adr_exp,taille(adresse));
      	pid = fork();
      	if (pid = = 0) {
                      	close(sock);
                      	read(socks, &serv, taille(service));
                      	if (serv.type = = 1)
                               rep = Service_Consultation(compte);
                      	else if (serv.type = = 2)
                               rep = Service_Virement(compte);
    			else 
    	    		    (Afficher "Mauvais choix entrer '1' ou '2'")
                      	write (socks, &rep, taille(reponse)) ;
                      	close (socks);
                      	exit(); }
      	wait()
    	else
               close(socks);
      	}
    }

  4. #4
    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 doumo Voir le message
    J'ai essayé d'écrire un pseudo-code pour le serveur est que ED, vous pourriez me corriger svp
    Ce n'est pas ça que j'ai demandé. Ce qu'il faut, c'est une spécification claire du protocole applicatif.

    - liste des commandes avec les paramètres et les réponses.
    - enchainement des commandes

    bref, il faut prendre du recul, penser 'application' et non 'langage C' ni 'sockets' ...

  5. #5
    Membre averti
    Profil pro
    ingénieur informatique
    Inscrit en
    Janvier 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 41
    Par défaut
    Je ne comprends pas ce que tu veux dire quand tu parles de 'protocole applicatif', je veux juste écrire un pseudo-code détaillé avec les primitives de communication et les appels systémes linux pour le serveur.

  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 doumo Voir le message
    Je ne comprends pas ce que tu veux dire quand tu parles de 'protocole applicatif', .
    C'est bien le neud du problème. Ca signifie que tu n'as ni les connaissances ni l'expérience nécessaires pour réaliser un projet de ce type...

    Pour réaliser un projet, savoir coder en C ne suffit pas. Le C n'est qu'un outil. Ce qui compte réellement, c'est de définir correctement le projet. C'est ce que je te demande de faire.
    je veux juste écrire un pseudo-code détaillé avec les primitives de communication et les appels systémes linux pour le serveur
    Il est beaucoup trop tôt pour parler de pseudo-code. L'analyse se fait toujours du haut vers le bas.

    1 - on définit le problème à résoudre
    2 - on étudie les moyens de le résoudre
    3 - on implémente une solution.

    Pour le moment, on en est au 1. On a besoin de savoir quelles sont les fonctions à disposition des clients et comment s'enchainent les actions et quelles sont leurs conséquences...

    Si c'est une application réelle, il y a de graves enjeux liés à la sécurité, qui doivent être pris en compte dès la définition du projet.

    Dans la partie 2, il va falloir déterminer l'architecture client/serveur utilisée (client lourd de type application ou léger de type navigateur web). Les conséquences sur l'architecture logicielle sont énormes. Il ne faut pas se tromper.

    Ensuite, vient la phase 3 de réalisation

    On en est loin, on ne sait même pas quel langage sera utilisé...

Discussions similaires

  1. application client-serveur avec les sockets
    Par matheo600 dans le forum C++
    Réponses: 1
    Dernier message: 20/04/2008, 17h21
  2. application client/serveur avec les sockets
    Par baya1 dans le forum JBuilder
    Réponses: 1
    Dernier message: 24/02/2007, 15h37
  3. Réponses: 1
    Dernier message: 30/05/2005, 17h02
  4. Réponses: 2
    Dernier message: 01/10/2002, 12h25

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