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


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut Serveur / client TCP
    Bonjour à tous,

    J'essaye à partir de ce code de recevoir les données du client (du texte), et ensuite les stocker dans un fichier.

    Comment savoir que l'envoie du fichier est terminé (pour ensuite sauvegarder le fichier) ?
    Alors... Est-ce qu'il faut envoyer depuis le client "-1", une fois que le fichier est terminé ? Et remplacer "for( ;; )" par "while(mess_recu!="-1")".

    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
    #include <stdio.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netdb.h>
    #include <netinet/in.h>
     
    int main(int argc, char *argv[])
    {
     
     /*Informations sur le serveur*/
     char hostname[1024];
     hostname[1023] = '\0';
     gethostname(hostname, 1023);
     printf("------------------------Information sur le serveur----------------------------\nhostname : %s\nport : %s\n",hostname,argv[1]);
     /*Fin informations sur le serveur*/
     
      char mess_recu[BUFSIZ],mess_envoi[BUFSIZ];
      char* contenu_fich;
      int  pp,d_sock,cc,l;
      int longe,service,childpid;
      char tab[128];
     
      struct sockaddr_in serveur = {AF_INET};
      struct sockaddr_in client;
     
      serveur.sin_port=2010; /* 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 */
     
      pp=bind(d_sock,(struct sockaddr*)&serveur,sizeof(serveur));
     
      //Boucle pour attendre les données du client
      for (;;){
    	  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 */
    	  read(service,mess_recu,sizeof(mess_recu));
    	  strcat(contenu_fich,mess_recu);
      }
      close(d_sock);
    }
    Merci d'avance pour votre aide, je suis sûr qu'il existe des sources donnant ce résultat mais j'ai rien trouvé.

    shepounet

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Il y a plusieurs solutions pour synchroniser le client et le serveur.

    1. Soit le serveur sait exactement la taille de ce qu'il doit recevoir, le client envoie une trame de cette taille et le serveur lit une trame de la taille attendue.
    2. Soit le serveur et le client définissent un marqueurr de fin de fichier, le client envoie le texte puis le marqueur et le serveur lit tant qu'il n'a pas reçu le marqueur de fin de fichier.
    3. Soit le client envoie en premier la taille de ce qu'il va envoyer ensuite. Le serveur lit la taille et lit ensuite tant que la taille reçue n'est pas la taille attendue.


    Dans ton cas, vu que c'est un protocole texte, tu peux partir sur l'option 2 ou même sur l'option 3 qui est (à mon avis) plus pérenne.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    En partant sur la deuxième option. J'ajoute un marqueur de fin de fichier de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      //Boucle pour attendre les données du client
      while (mess_recu != '#'){
                   ....
      }
    Est-ce qu'il s'agit de la bonne solution (en partant du principe que la fin de fichier est representé par '#').
    Depuis le client, une fois le fichier terminé j'envoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(sock,'#',sizeof('#'));
    .

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    C'est une solution mais il faut que tu soies sûr que le caractère '#' ne sera jamais présent dans le texte que tu dois transférer.

    J'aurai plutôt vu un caractère non imprimable de la table ASCII : ETX(code ASCII 3), ETB(code ASCII 23), FS(code ASCII 28), GS(code ASCII 29), US(code ASCII 30) qui on plus de chances de ne jamais se trouver dans un texte.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 75
    Par défaut
    D'accord, je vais préférer cette solution alors !

    Merci pour votre aide en tout cas, je met le "résolu".

    Cordialement,
    shepounet

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Suivant ce que tu veux faire, une autre solution est simplement de fermer la connexion une fois les données envoyées.

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

Discussions similaires

  1. Serveur/client TCP --> Vous en pensez quoi ?
    Par shepounet dans le forum Réseau
    Réponses: 1
    Dernier message: 15/12/2010, 18h36
  2. Serveur / client tcp
    Par margou dans le forum Débuter
    Réponses: 3
    Dernier message: 08/06/2008, 10h47
  3. [Réseau] Problème Serveur Client TCP linux embarqué
    Par FabienpERRIN dans le forum Réseau
    Réponses: 2
    Dernier message: 31/07/2007, 20h47
  4. [Réseau][Débutant]Application Serveur/Client par TCP/IP
    Par Belegkarnil dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 13/11/2005, 13h39
  5. Client Tcp/ Serveur TCP
    Par Phébus dans le forum Web & réseau
    Réponses: 2
    Dernier message: 21/07/2005, 16h35

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