1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2016
    Messages : 65
    Points : 176
    Points
    176

    Par défaut Problème dans struct in_addr

    Bonjour tout le monde,
    j'ai créé ce code 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
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<unistd.h>
     
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<netdb.h>
     
    #define PORT 2050 
     
    void main(){
     
    int sock1 ;
    char mess[80] ;
    struct sockaddr_in clt  ;
    struct hostent *hostinfo=NULL ;
    //taille du structure :
    int taille=sizeof(struct sockaddr);
    //creation du socket :
    sock1=socket(AF_INET,SOCK_STREAM,0) ;
     
    //recuperation d'information sur le serveur 
    hostinfo=gethostbyname("www.ps.com");
    //INITIALISATION D'ADRESSE SOCKET :
     
    clt.sin_port=htons(PORT);
    clt.sin_family=AF_INET ;
    clt.sin_addr.s_addr= (struct in_addr*) hostinfo->h_addr ;
     
    connect(sock1,(struct sockaddr *)&clt ,taille); 
    while(1){
    bzero(mess,80);
    scanf("%s",mess);
    write(sock1,mess,80);
    read(sock1,mess,80);
    printf(" MESSAGE RECUS : %s" ,mess);
    bzero(mess,80);
    }
    close(sock1);
    }
    au niveau de ce ligne qui il y un probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clt.sin_addr.s_addr= (struct in_addr*) hostinfo->h_addr ;
    Si j'écris :
    quand je fais clt.sin_addr.s_addr= (struct in_addr*) hostinfo->h_addr ; le compilateur déclare un avertissement
    si je fait clt.sin_addr.s_addr=* (struct in_addr*) hostinfo->h_addr ; le compilateur déclare une erreur.

    Nom : client_serveur.png
Affichages : 38
Taille : 20,7 Ko

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    4 354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 4 354
    Points : 17 058
    Points
    17 058

    Par défaut

    Salut,

    aucun de tes casts ne fait sens.
    S_addr (ou s_addr) est un u_long : unsigned long
    gethostbyname retourne un hostent et ce qui t'intéresse est h_addr_list, qui est un simple char* et qu'il faut donc cast.
    La syntaxe, comme tu peux le constater aisément sur une doc est bien entendu de cast en u_long, et non en in_addr
    clt.sin_addr.s_addr = *((unsigned long*)hostinfo->h_addr_list[0]);

    Et gethostbyname est deprécié, il faut favoriser getaddrinfo.

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

Discussions similaires

  1. Probleme dans request.QueryString("chaine")
    Par soufienne dans le forum ASP
    Réponses: 8
    Dernier message: 24/08/2004, 14h49
  2. Probleme dans une procedure stockée
    Par malbaladejo dans le forum MS SQL-Server
    Réponses: 5
    Dernier message: 07/07/2004, 14h08
  3. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51
  4. Probleme dans une clause like !
    Par adil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/07/2003, 16h47
  5. Probleme dans ma requete
    Par Kuroro dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 11h14

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