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 :

Pb de communication avec les sockets (en c sous unix)


Sujet :

Réseau C

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 26
    Par défaut Pb de communication avec les sockets (en c sous unix)
    Bonjour

    Mon projet de bataille navale est en client serveur. Donc je lance le serveur puis je lance le client.
    Sur le client je rentre mon login et mon mot de passe puis je l'envoie au serveur.

    Mon probleme c'est la communication entre le client et le serveur. Pour cela j'utilise la fonction recv et send. Quand on fait un envoi ca marche (l'envoi et la récption se passe bien) mais j'envoie le login et le mot de passe (donc je fais 2 envois). Et là ca coince car je n'arrive pas à récupérer le 2ème envoi.

    Je vous joins mon code


    Vraiment merci de votre aide car là je suis vraiment coincé


    code du 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
    87
    88
    89
    90
    #include <stdlib.h> 
    #include <string.h> 
    #include <sys/types.h> 
    #include <sys/socket.h> 
    #include <arpa/inet.h> 
    #include <errno.h> 
    #include <stdio.h> 
     
     
    #define PORT 44951 
    #define ADDRESS "10.211.55.5" 
     
     
    int sd, ns, fromlen; 
     char essai[6]=""; 
     char essai2[7]=""; 
     char login[50]="admin"; 
     char mdp[50]="azerty"; 
     struct sockaddr_in my_addr, user_addr; 
    int i=0; 
    int rec=0; 
    int rec2=0; 
    int temp=0; 
    int connex=0; 
    int envoi=0; 
     
     
     
    int main() 
    { 
     
     //SOCKET 
     if((sd=socket(AF_INET,SOCK_STREAM,0)) == -1) 
     {perror("\n erreur socket"); exit(-1);} 
     
     //DEFINITION DE L'INTERFACE RESEAU 
     my_addr.sin_family = AF_INET; 
     my_addr.sin_port = htons(PORT); 
     my_addr.sin_addr.s_addr = inet_addr(ADDRESS); 
     bzero(&(my_addr.sin_zero),8); 
     
     //BIND 
     if((bind(sd,(struct sockaddr *)&my_addr, sizeof(struct sockaddr))) == -1) 
     {perror("\n erreur bind"); exit(-1);} 
     
     //LISTEN 
     if((listen(sd,NBCLI)) == -1) 
     {perror("\n erreur listen"); exit(-1);} 
     
    printf("\n avant le accept\n"); 
     
     //ACCEPT 
     ns = accept(sd,(struct sockaddr *)&user_addr, &fromlen); 
    printf("\n apres le accept\n"); 
     
     while (envoi!=2) 
     
     { 
     
     printf("\n passage dans le while\n"); 
     
     
     
      if(fork()==0) 
      { 
       //RECV 
       rec=recv(ns,essai,8,0); 
     
        if(rec!=-1) 
        { 
         send(ns ,"ok" ,strlen("ok")+1,0); 
         envoi++; 
         printf("\n %s\n",essai); 
         printf("\nenvoi %d\n",envoi); 
     
        } 
        else { 
                                           envoi=2; 
                                           perror("errrreur recv"); 
     
                                         } 
       //rec2=recv(ns,essai2,7,0); 
      } 
                    else{ 
                    envoi=2; 
                    } 
     
     } 
     
    }

    Code du 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
    #include <stdlib.h> 
    #include <string.h> 
    #include <sys/types.h> 
    #include <sys/socket.h> 
    #include <arpa/inet.h> 
    #include <errno.h> 
    #include <stdio.h> 
     
    #define PORT 44951 
    #define ADDRESS "10.211.55.5" 
     
    int main() 
     
    { 
     int sd,fromlen,con,env,env2; 
     char essai[6]; 
    char essai2[6]; 
    char login[12]; 
    char mdp[12]; 
     struct sockaddr_in dest_addr; 
     
    sd=socket(AF_INET,SOCK_STREAM,0); 
     
     if (sd==-1) 
      perror("\nerreur socket \n"); 
     else 
     { 
      dest_addr.sin_family=AF_INET; 
      dest_addr.sin_port=htons(PORT); 
      dest_addr.sin_addr.s_addr=inet_addr(ADDRESS); 
      bzero(&(dest_addr.sin_zero),8); 
     
      con=connect(sd,(struct sockaddr *) &dest_addr, sizeof(struct sockaddr)); 
     
      if (con==-1) 
       perror("\Erreur connect \n"); 
      else 
      { 
       printf("Veuillez entrer votre login\n"); 
       fgets(login,sizeof login,stdin); 
     
     
       printf("Veuillez entrer votre mot de passe\n"); 
       fgets(mdp,sizeof mdp,stdin); 
     
       env=send(sd,login,strlen(login) + 1,0); 
     
       if (recv(sd,essai,6,0)!=-1) 
       { 
       printf("\nessai=%s\n",essai); 
       env2=send(sd,mdp,strlen(mdp) + 1,0); 
       } 
       //rec=recv(sd,essai2,6,0); 
     
       if ((env==-1)||(env2==-1)) 
        perror("\n erreur receive \n"); 
       else 
       { 
        //printf("\n%s\n",essai2); 
        printf("\n%d\n",strlen(login)); 
        printf("\n%d\n",strlen(mdp)); 
       } 
      } 
     } 
     close(sd); 
    }

  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
    Au moins un bug potentiel ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rec=recv(ns,essai,8,0);
    Tu tentes de recevoir 8 caractères dans un buffer de 6.

    En ce qui concerne ton problème, le serveur ne connait pas (et ne peut pas connaitre) la longueur des données que tu envoies, il attends donc arbitrairement 8 caractères.

    Ce qu'il faut, c'est envoyer en premier la longueur du login puis le login, puis la longueur de mot de passe et enfin le mot de passe afin de garder la synchronisation entre le serveur et le client.
    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
    .

Discussions similaires

  1. communication avec les sockets
    Par yacin87 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 09/04/2010, 07h50
  2. communication client serveur avec les sockets
    Par timtima dans le forum Linux
    Réponses: 2
    Dernier message: 07/11/2007, 10h23
  3. Problème d'envoie de text avec les sockets
    Par Coussati dans le forum Web & réseau
    Réponses: 6
    Dernier message: 16/09/2005, 10h26
  4. [Win32] Problème avec les sockets
    Par mickael777 dans le forum MFC
    Réponses: 3
    Dernier message: 12/08/2005, 11h15
  5. [C#] Communication avec les ports parallèle et RS232
    Par jejerome dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2004, 22h57

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