Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2940 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c] afficher un élément d'une structure complexe de type hostent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] afficher un élément d'une structure complexe de type hostent

n°558225
lordankou
Posté le 03-11-2003 à 23:24:13  profilanswer
 

bon voila j'ai ma structure si dessous :
 
struct  hostent {
     char *  h_name;      
     char ** h_aliases;  
     int     h_addrtype;  
     int     h_length;    
     char ** h_addr_list;
};
 
avec une variable "adresse" de type hostent.
je voudrais afficher h_name et je fais donc :
printf("%s", adresse.h_name);
 
mais là le compilo m'envoie bouler et renseignement pris auprès du prof il ne sait pas d'ou ça vient...  :ange:  :heink:  
 
comment faire pour afficher ce h_name ? (car euh il trouve pas l'adresse du serveur donc bah obliger de remonter et de faire des printf partout...).

mood
Publicité
Posté le 03-11-2003 à 23:24:13  profilanswer
 

n°558233
nraynaud
lol
Posté le 03-11-2003 à 23:30:19  profilanswer
 

LordAnkou a écrit :


mais là le compilo m'envoie bouler

On peut avoir le message complet et la ligne stp ?


---------------
trainoo.com, c'est fini
n°558270
gilou
Modérateur
Modzilla
Posté le 04-11-2003 à 00:17:22  profilanswer
 

LordAnkou a écrit :

bon voila j'ai ma structure si dessous :
 
struct  hostent {
     char *  h_name;      
     char ** h_aliases;  
     int     h_addrtype;  
     int     h_length;    
     char ** h_addr_list;
};
 
avec une variable "adresse" de type hostent.
je voudrais afficher h_name et je fais donc :
printf("%s", adresse.h_name);
 
mais là le compilo m'envoie bouler et renseignement pris auprès du prof il ne sait pas d'ou ça vient...  :ange:  :heink:  
 
comment faire pour afficher ce h_name ? (car euh il trouve pas l'adresse du serveur donc bah obliger de remonter et de faire des printf partout...).

Juste a titre indicatif, prof ou??
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°558287
nraynaud
lol
Posté le 04-11-2003 à 00:36:59  profilanswer
 

c'est pas hors-charte le trollage sur l'école supérieure privée d'informatique du sud de Paris ?


---------------
trainoo.com, c'est fini
n°558326
matafan
Posté le 04-11-2003 à 03:53:26  profilanswer
 

Citation :

(car euh il trouve pas l'adresse du serveur donc bah obliger de remonter et de faire des printf partout...)


 
Sinon pour debugger il y a aussi les debugger. Sauf cas bien particuliers c'est quand même mieux que les printf.
 
Sinon donne le morceau de code ou tu définis adresse, et celui où tu cherches a l'afficher.

n°558332
lordankou
Posté le 04-11-2003 à 07:04:55  profilanswer
 

Citation :

On peut avoir le message complet et la ligne stp ?


 
j'ai pas la ligne précise mais il me dit que c pas une structure ou une union (j'essaierai de marquer la ligne précise dans la journée).
 

Citation :

Juste a titre indicatif, prof ou??


iut info à bayonne
 

Citation :

c'est pas hors-charte le trollage sur l'école supérieure privée d'informatique du sud de Paris ?


c quoi le trollage ?
 

Citation :

Sinon donne le morceau de code ou tu définis adresse, et celui où tu cherches a l'afficher.


 
  struct hostent *adresse_a;
 
  bzero(&serveur_a, sizeof(serveur)); /* remise a zero de la variable serveur */
  adresse_a = gethostbyname(nom_serveur_a); /* on recupere l'adresse internet */
  printf("%s", adresse_a.h_name);

n°558351
Moktar1er
No one replies...
Posté le 04-11-2003 à 08:46:05  profilanswer
 

c'est pas plutôt:

Code :
  1. adresse_a->h_name


par hasard :??:
 
edit: fôte inside


Message édité par Moktar1er le 04-11-2003 à 08:46:31
n°558355
nraynaud
lol
Posté le 04-11-2003 à 09:06:16  profilanswer
 

[+1] à moktar


---------------
trainoo.com, c'est fini
n°558912
lordankou
Posté le 04-11-2003 à 18:46:57  profilanswer
 

et hop on continue mais bon je vais un peu exposer mon problème :
j'ai donc un serveur qui se nomme Iparla sur lequel je veux me connecter :
 

Code :
  1. bzero(&serveur, sizeof(serveur));  remise a zero de la variable serveur */
  2.   adresse = gethostbyname(nom_serveur); /* on recupere l'adresse internet */
  3.   printf("nom du serveur : %s\n",adresse->h_name);
  4.   printf("type d'adresse : %d\n",adresse->h_addrtype);
  5.   printf("longueur de l'adresse : %d\n",adresse->h_length);


 
bon alors là il me sort bien le nom du serveur iparla.iutbayonne.univ-pau.fr
le type d'adresse : 2 (ça doit être IF_NET normalement)
la longueur de l'adresse : 4 (là je trouve ça bizarre mais bon...)
 
alors le problème que j'ai c'est :  
je voudrais afficher l'adresse Internet contenu dans la variable adresse (qui est de type hostent) mais ça je sais pas faire.
 
 
parce qu'au final il a le nom du serveur mais il me trouve pas l'adresse internet (quand je la réaffecte dans une autre variable) et n'arrive pas à se connecter (mais il crée bien la socket).

n°559242
matafan
Posté le 05-11-2003 à 03:38:43  profilanswer
 

h_addr_list est un tableau d'adresses. Chaque adresse est un tableau de h_length char. En IPv4 une adresse fait 32 octets, soit 4 char sur ton archi. D'où h_length = 4. Le truc pour l'affichage c'est qu'il ne faut pas afficher les char en tant que char (%c), mais plutôt en tant que %hhu. Tu peux faire (c'est sale, c'est pour l'exemple) :
 

Code :
  1. #include <stdio.h>
  2. #include <netdb.h>
  3. int
  4. main(int argc, char *argv[], char *envp)
  5. {
  6.         struct hostent *h;
  7.         h = gethostbyname("www.google.com" );
  8.         printf("name   = %s\n"
  9.                "type   = 0x%x\n"
  10.                "length = %d\n"
  11.                "addr   = %hhu.%hhu.%hhu.%hhu\n",
  12.                h->h_name,
  13.                h->h_addrtype,
  14.                h->h_length,
  15.                h->h_addr_list[0][0],
  16.                h->h_addr_list[0][1],
  17.                h->h_addr_list[0][2],
  18.                h->h_addr_list[0][3]);
  19. }


 
Sinon, t'ai-je déja suggéré d'utiliser un debugger ? Et d'apprendre ce qu'est un pointeur aussi, parce que le coup du « . » et du « -> » c'est quand même la base.

mood
Publicité
Posté le 05-11-2003 à 03:38:43  profilanswer
 

n°560580
lordankou
Posté le 06-11-2003 à 09:20:50  profilanswer
 

merci pour tout !
j'ai trouvé ou se trouve l'erreur !
 
je vous explique :

Code :
  1. printf("nom du serveur pour la fonction : %s\n", nom_serveur);
  2.  
  3.   bzero(&serveur, sizeof(serveur));  /* remise a zero de la variable serveur */
  4.   bzero(&adresse, sizeof(adresse));
  5.   adresse = gethostbyname(nom_serveur); /* on recupere l'adresse internet */
  6.   printf("nom du serveur : %s\n",adresse->h_name);
  7.   printf("type d'adresse : %x\n",adresse->h_addrtype);
  8.   printf("longueur de l'adresse : %d\n", adresse->h_length);
  9.   printf("adresse1 : %hhu\n",adresse->h_addr_list[0][0]);
  10.   printf("adresse2 : %hhu\n",adresse->h_addr_list[0][1]);
  11.   printf("adresse3 : %hhu\n",adresse->h_addr_list[0][2]);
  12.   printf("adresse4 : %hhu\n",adresse->h_addr_list[0][3]);
  13.  
  14.  
  15.   /* test si la fonction a trouver une adresse correspondant au serveur */
  16.   if (adresse==NULL)
  17.     {
  18.       /* gestion des erreurs */
  19.       /* ----> prevoir la gestion des erreurs avec h_errno */
  20.       printf("erreur numero : %d\n", h_errno);
  21.       exit(-1); /* fin non normal du programme */
  22.     }


 
me retourne :
 
nom du serveur pour la fonction : iparla
nom du serveur : iparla.iutbayonne.univ-pau.fr
type d'adresse : 2
longueur de l'adresse : 4
adresse1 : 65472
adresse2 : 65448
adresse3 : 65500
adresse4 : 15
 
 
ors si il ne trouvait pas l'adresse IP il devrait rentrer dans mon if !

Citation :

Les fonctions gethostbyname() et gethostbyaddr() renvoient
       un pointeur sur la structure hostent, ou bien un  pointeur
       NULL si une erreur se produit, auquel cas h_errno contient
       le code d'erreur.


par conséquent il trouve l'adresse IP d'iparla mais ce n'est pas la bonne qu'il affiche !
 
 

n°560586
chrisbk
-
Posté le 06-11-2003 à 09:33:09  profilanswer
 

moktar1er a écrit :

c'est pas plutôt:

Code :
  1. adresse_a->h_name


par hasard :??:
 
edit: fôte inside


 
un prof qui trouve pas ca c'est quand meme
 
1/Une sacree b(o)use
2/Qqun qui doit super bien connaitre son compilo pour pas comprendre les msg d'erreurs...


Message édité par chrisbk le 06-11-2003 à 09:33:26
n°560843
HelloWorld
Salut tout le monde!
Posté le 06-11-2003 à 14:08:17  profilanswer
 

Citation :

iut info à bayonne


J'y suis passé !

Citation :

un prof qui trouve pas ca c'est quand meme
 
1/Une sacree b(o)use
2/Qqun qui doit super bien connaitre son compilo pour pas comprendre les msg d'erreurs...


 
Ca depend des profs... mais y'en a en effet qui sont plus doués pour les apéros que pour coder...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c] afficher un élément d'une structure complexe de type hostent

 

Sujets relatifs
[modélisation] Mersise-Type de documents?[win32][newbie] Empecher un controle edit d'afficher son menu
[c/c++] Afficher une image avec plus de 16-256 couleurs sous Visual[java] transformation implicite de type
[C] Lire une structure (fichier bitmap)Detruire un element d'un InnerHtml
problème avec 'operator type();' : ambiguitéIE refuse d'afficher une image [super mysterieux inside]
novice [borland c++ buider] Comment afficher une image avec un bouton?[VB.NET] afficher le résultat dans label
Plus de sujets relatifs à : [c] afficher un élément d'une structure complexe de type hostent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR