Plantage lors de la récup d'une IP....

Signaler
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
-
Bonsoir tout le monde!!

Alors la, faut que vous m'expliquiez parce que ej en comprends pas!! J'ai cherché sur msdn etc...tout compile nikel...mais le programme plante lors de la connexion...voici le bout de code....

  UINT hAddr;
  hAddr = inet_addr("mon.nom.dote.mon.fai.fr"); 
  
  struct hostent* host;
  host = gethostbyaddr((char*) &hAddr, 4, AF_INET);
  
  addr.sin_family = AF_INET;
  addr.sin_port = htons(port);
  addr.sin_addr.s_addr = inet_addr(host->h_addr_list[0]);


Merci d'avance de votre aide! :)

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))

7 réponses

Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
The Windows Sockets inet_addr function converts a string containing an Internet Protocol dotted address into an in_addr.

Autrement dit, une IP sous forme "192.168.0.3" et non "chambre.mshome.net" ! Utilise gethostbyname pour résoudre l'adresse à partir du nom et te connecter.
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Nan, ça plante tjs....:'(((...le but c'est de retrouver une IP à partir du nom d'hote...et de s'y connecter...qqun a une idée ? plz nébula, si tu sais qqch, parle!! lol

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Gendal67 > tu as verifie que gethostbyaddr() ne retourne pas NULL ? ou alors plante avant le retour ?

Nebula aide sur CS du mieux qu'il peut et en termes courtois, j'espere donc qu'il continuera.

ciao...
BruNews, MVP VC++
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Ce code le fait sans problème (ni vérification des erreurs) :

#include <winsock2.h>
#include <stdio.h>

#define MYHOST "www.cppfrance.com"

int main(void) {
  WSADATA WSAData;
  HOSTENT* ServerInfos;
  struct in_addr ServerAddr;
  if (WSAStartup(MAKEWORD(2, 0), &WSAData)) {
    printf("unable to start winsock\n");
    return EXIT_FAILURE;
  }
  if (!(ServerInfos = gethostbyname(MYHOST))) {
    printf("unable to resolve remote host\n");
    return EXIT_FAILURE;
  }
  ServerAddr.s_addr = *((u_long*) ServerInfos->h_addr);
  printf("Remote IP for %s : %s\n", MYHOST, inet_ntoa(ServerAddr));
  return 0;
}
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Oui oui merci nébula! il me reste juste un dernier souci : l'adresse IP retourné alors par inet_ntoa() correspond à une IP que j'avais il y a qq heures (g une IP dynamique à chaque connexion, elle change)..mais pas celle que j'ai actuellement!

J'ai fait:

  HOSTENT* host;
  host = gethostbyname("nomdote.fai.fr");
  
  struct in_addr inaddr;
  
  addr.sin_family = AF_INET;
  addr.sin_port = htons(port);
  addr.sin_addr.s_addr = *((u_long*)host->h_addr_list[0]);
  
  MessageBox(0, inet_ntoa(addr.sin_addr), "lol", MB_OK);
  
  sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  bStayConnec = TRUE;
  
  DWORD tid;
  CreateThread(0, 0, WaitForUDPData, (LPVOID) 0, 0, &tid);


En prenant juste host->h_addr_list, ça me donne une IP encore +érronnée....:( voila, si tu comprend ou est le probleme , je suis tout ouie ^^

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Normal que çà déconne : h_addr_list est une liste d'ip, h_addr un alias vers la première IP de la liste.

Sinon quand tu changes d'ip, ton host change aussi (en tout cas moi avec wanadoo, il change...) Tourne toi vers un système comme no-ip.com qui te donne un vhost et des outils pour le mettre à jour automatiquement, et résoud l'host en .no-ip.com ?
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

C'est bon, j'ai résolu le probleme!!! Comme un grand, ac votre aide biensur ^^ .. en fait, je ne lui ai pas donné mon nom d'hote donné par le FAI mais plutot le nom de mon ordi sur le réseau..;et ça marche nikel!! :big) encore merci!!

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))