Salut,
Quand on programme du "réseau" on peut utiliser la fonction gethostbyname() qui consigne des info sur le serveur sur lequel on veut se connecter dans la structure suivante:
Code :
- typedef struct hostent {
- char FAR* h_name;
- char FAR FAR** h_aliases;
- short h_addrtype;
- short h_length;
- char FAR FAR** h_addr_list;
- } HOSTENT,
- *PHOSTENT,
- FAR *LPHOSTENT;
|
Toutes les IP sont dans le champ h_addr_list, il y a plusieurs IP d'où le **.
En général on se préoccupe que de la première c'est a dire h_addr_list[0] et c'est elle qui m'intéresse, je voudrais l'afficher et je sais pas comment faire.
En faisant:
Code :
- printf("IP serveur: %d.%d.%d.%d\n", stru->h_addr_list[0][0], stru->h_addr_list[0][1],\
- stru->h_addr_list[0][2], stru->h_addr_list[0][3]);
|
ca foire quand un nombre de l'IP est trop grand (plus grand que 128 je crois) ca affiche à la place un résultat completement abérant, négatif parfois suivant le formatage utilisé dans printf().
Il me semble que cela vient d'une histoire de signé/non signé. Dans ce cas où ca foire, et dans ce ca seulement,
on trouve la bonne valeur en ajoutant 256:
stru->h_addr_list[0][i]+256
il faudrait donc pour chacun des 4 nombre de l'adresse faire le test:
stru->h_addr_list[0][0] < 0 ? ajouter 256 : ne rien changer
Vu comme c'est compliqué pour ce que c'est je me suis dit qu'il devait bien y avoir un autre moyen beaucoup plus simple !
J'ai un peu cherché sur le net, j'ai vu quelqu'un dire qu'il fallait formater comme ceci: %hhu.%hhu.%hhu.%hhu
mais ca ne marche pas.
Voilà si vous avez une idée ! Moi je l'avais deja fait sous UNIX et j'avais pas eu ce problème.
Question subsidiaire: c'est quoi FAR ? un type ? si oui, lequel ?