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

Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 20 déc. 2004 à 01:46
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 - 20 déc. 2004 à 18:52
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

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
20 déc. 2004 à 02:46
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.
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
20 déc. 2004 à 11:47
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!! :-))
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 déc. 2004 à 12:18
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++
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
20 déc. 2004 à 17:13
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;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
20 déc. 2004 à 17:46
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!! :-))
0
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
20 déc. 2004 à 18:19
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 ?
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
20 déc. 2004 à 18:52
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!! :-))
0
Rejoignez-nous