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 C qui reçoit un fichier et en récupère le contenu


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Serveur C qui reçoit un fichier et en récupère le contenu
    Bonjour,
    Je débute en programmation client serveur en C. J'ai écrit un client en C qui envoie un fichier contenant des données à mon serveur. Le serveur doit lire et extraire des données contenues dans le fichier.

    Je vois vraiment pas cmment faire avec un fichier. Comment enregistrer le fichier au niveau du serveur puis lire les données.

    Merci de votre aide.

  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 Re: Serveur C qui reçoit un fichier et en récupère le conten
    Citation Envoyé par I_believe_I_can_fly
    Je débute en programmation client serveur en C. J'ai écrit un client en C qui envoie un fichier contenant des données à mon serveur.
    Il lit les données dans un ficher et il envoi ces blocs de données vers le serveur... Mode connecté recommandé (TCP/IP )
    Le serveur doit lire et extraire des données contenues dans le fichier.
    Le serveur reçoit les blocs de données et les enregistre sur le disque.
    Je vois vraiment pas cmment faire avec un fichier. Comment enregistrer le fichier au niveau du serveur puis lire les données.
    Comme d'habitude, avec fopen(), fwrite() etc.

    Pour transferer un fichier, il faut un petit peu de protocole :
    Au minimum, transmettre le nom, la taille. Si le fichier existe, le serveur peut éventuellement demander confirmation avant de massacrer le fichier présent... Ensuite, transmettre les données d'un coup (TCP se charge du découpage, mais il faut quand même boucler sur le send() en surveillant le nombre de bytes transmis, restant etc.)
    Quand c'est fini, on signale la fin de transfert proprement... Avant d'enregistrer définitivement le ficher, le serveur vérifie alors qu'il a bien tout reçu... Il peut alors renvoyer un compte-rendu...

    C'est un excellent exercice 'réseau' et 'protocole' dans lequel le C n'est qu'un outil de réalisation...

    Autrement dit, ce n'est pas une question "C"...

    Sinon, se renseigner sur l'existant :

    TFTP (UDP)
    FTP (TCP)

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bonjour Emmanuel,
    Je te remercie de l'exellence de ton explication.

    J'ai encore besoin d'un coup de pouce tjrs ds le cadre de cet exercice client/serveur que je dois réaliser.

    Voilà. Mon client doit envoyer des messages périodiquement au serveur (toutes les 10 sec par exemple). Y a t il une fonction en C qui permette de faire cela?
    Si oui, pourriez vous me donner un exemple d'utilisation?

    Je vous remercie d'avance.

  4. #4
    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 I_believe_I_can_fly
    Voilà. Mon client doit envoyer des messages périodiquement au serveur (toutes les 10 sec par exemple). Y a t il une fonction en C qui permette de faire cela?
    Si oui, pourriez vous me donner un exemple d'utilisation?
    Il y a la fonction POSIX.1 'select' qui peut se declencher à l'échéance d'un timer programmable...

    Sinon, un thread avec la fonction de suspension qui va bien (Sleep(), sleep(), ça dépend du système)

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Le client doit être installé sur une machine linux mandrake.

  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 I_believe_I_can_fly
    Le client doit être installé sur une machine linux mandrake.
    Alors sleep().

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Merci.
    Dis moi, tu n'aurais pas un exemple concret?

    Ce serait vraiment 8)

  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 I_believe_I_can_fly
    Merci.
    Dis moi, tu n'aurais pas un exemple concret?

    Ce serait vraiment 8)
    Non, mais ceci devrait t'aider à utiliser les pthreads...

    http://emmanuel-delahaye.developpez.com/pthreads.htm

  9. #9
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Merci bcp. Je vais essayer avec çà.

  10. #10
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bonjour Emmanuel,
    J'ai essayé avec sleep() et çà marche super bien.

    J'ai une autre question à te poser. En fait je dois écrire un client qui sera installé sur une machine et se chargera de récupérer certaines données sur cette machine là.
    -adressse ip, nom de la machine, dns, processeur, mémoire ...
    pour l'instant j'ai trvé comment récupérer le nom, adr ip, nbre de processeur.

    Je recherche à présent des fonctions en C qui me permettrait de trouver la mémoire (libre, totale, occupée), vitesse du processeur, ...

    Aurais tu des idées.

    Merci de ton aide.

  11. #11
    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 I_believe_I_can_fly
    J'ai une autre question à te poser. En fait je dois écrire un client qui sera installé sur une machine et se chargera de récupérer certaines données sur cette machine là.
    -adressse ip, nom de la machine, dns, processeur, mémoire ...
    pour l'instant j'ai trvé comment récupérer le nom, adr ip, nbre de processeur.

    Je recherche à présent des fonctions en C qui me permettrait de trouver la mémoire (libre, totale, occupée), vitesse du processeur, ...
    Rien de standard. Il faut voir si la question a un sens (mémoire libre? vu que ça bouge tout le temps.. et puis quelle mémoire ? Totale, process ?). Sinon, voir les fonctions systèmes ou les fichiers d'informations (sous Linux, /info/... si je me souviens bien). Ton code ne sera évidemment pas portable. T'as vraiment besoin de savoir tout ça ? Le mieux est de concevoir du code indépendent du système et de la machine...

  12. #12
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Bonjour Emmanuel,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rien de standard. Il faut voir si la question a un sens (mémoire libre? vu que ça bouge tout le temps.. et puis quelle mémoire ? Totale, process ?). Sinon, voir les fonctions systèmes ou les fichiers d'informations (sous Linux, /info/... si je me souviens bien). Ton code ne sera évidemment pas portable. T'as vraiment besoin de savoir tout ça ? Le mieux est de concevoir du code indépendent du système et de la machine...
    La question a un sens. peut être que je n'ai pas été assez explicite. En fait le client que j'écris sera installé sur une machine et est chargée de renvoyer de façon périodique des infos variables de la machines (mémoire...) à un serveur.

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Si c'est sous linux, tu trouveras les informations utiles dans /proc/*.

  14. #14
    Futur Membre du Club
    Inscrit en
    Août 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si c'est sous linux, tu trouveras les informations utiles dans /proc/*.
    Je sais que les infos sont dans /proc/ . Mais je recherche des fonctions en C qui puissent me permettre de récupérer ces données là. Je travaille sous debian.
    Any idea?

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Points : 26
    Points
    26
    Par défaut
    ah tu fais un outil de monitoring ?

    En général c'est l'inverse celui qui est monitoré c'est le .... serveur et il n'envoie pas de facon periodique, on lui demande de facon pèriodique .

    Enfin il me semble..... je n'ai fait que très peu d'outil de monitoring.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par I_believe_I_can_fly
    Je sais que les infos sont dans /proc/ . Mais je recherche des fonctions en C qui puissent me permettre de récupérer ces données là. Je travaille sous debian.
    Any idea?
    Bon... Révisons un peu. Qu'a dit Emmanuel Delahaye ?
    Citation Envoyé par Emmanuel Delahaye
    Rien de standard. [...] Ton code ne sera évidemment pas portable.
    Tu cherches des fonctions en C, de préférence toutes faites, mais...existent-elles ?
    Sincèrement, je me pose la question...
    Et que fais-je quand je me pose ce genre de question ? Je vais voir comment font les autres.

    Alors j'ai choisi un outil qui me donne des infos sur la mémoire...au hasard : vmstat.
    Comment fait vmstat pour récupérer des infos ? Allons voir le code source !
    Cet outil fait partie du "paquet" procps et les sources sont visibles .
    Mais penchons-nous plus précisément sur le coeur (enfin, une partie) de vmstat. Comment ki fait ?
    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
    static int getrunners(struct vmstat *stats)
    {
            struct direct *ent;
            DIR *proc;
            unsigned long running = 0, blocked = 0;
     
            proc = opendir("/proc");
    [...]
    static int procstat(struct vmstat *stats)
    {
            char buf[STAT_BUF_LEN];
            char *p;
            int fd;
     
            fd = open("/proc/stat", O_RDONLY);
    [...]
    static int procvmstat(struct vmstat *stats)
    {
            char buf[VMSTAT_BUF_LEN];
            char *p;
            int fd;
     
            fd = open("/proc/vmstat", O_RDONLY);
    [...]
    Allez, un petit extrait de sysinfo.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    "Error: /proc must be mounted and readable\n"                   \
    "  To mount /proc at boot you need an /etc/fstab line like:\n"  \
    "      /proc   /proc   proc    defaults\n"                      \
    "  In the meantime, `mount /proc /proc -t proc'\n"              \
    "  To set the permissions, `chmod 755 /proc'\n"                 \
    
    #define STAT_FILE    "/proc/stat"
    #define UPTIME_FILE  "/proc/uptime"
    #define LOADAVG_FILE "/proc/loadavg"
    #define MEMINFO_FILE "/proc/meminfo"
    Ben voilà : il va lire dans /proc.

    Donc, à mon humble avis, les fonctions que tu cherches sont (entre autres) : open(), read(), et close().

    Si tu trouves mieux : je suis preneur.

Discussions similaires

  1. outil qui télécharge des fichiers word d'un serveur
    Par unix27 dans le forum Windows XP
    Réponses: 5
    Dernier message: 23/11/2011, 13h08
  2. Applet qui lit des fichier sur le serveur
    Par morofiler dans le forum Applets
    Réponses: 3
    Dernier message: 04/05/2011, 15h15
  3. [PHP 5.3] Uploade de fichier Zippe pour récupéré leur contenu
    Par geforce dans le forum Langage
    Réponses: 0
    Dernier message: 19/05/2010, 20h03
  4. Réponses: 3
    Dernier message: 11/03/2008, 02h14
  5. [VB.NET] Classe qui pilote des Fichier .INI
    Par sygale dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 21h04

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