Gethostbyname [Résolu]

Messages postés
31
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
25 février 2009
- - Dernière réponse : BloP68
Messages postés
31
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
25 février 2009
- 26 déc. 2008 à 18:45
Bonsoir tout le monde,

Je suis actuellement en train d'écrire un logiciel de chat.
Je souhaite récuperer l'adresse du serveur grâce à la fonction "gethostbyname".
Mais cette fonction me renvoi rien .

Je commence à être à court d'idées.
J'ai beau essayer avec 127.0.0.1 ou un nom de domaine.

Les erreurs renvoyer par perror et herror sont:

Unknown host
Connection timed out

Je vous remerci d'avance pour vos réponse.
____________________________________________________________________________
#include <netdb.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include

#include <string.h>

int main()

{

struct hostent *addr_srv;
char ip[20];
char adresse[255];

fgets(adresse,255,stdin);
addr_srv = gethostbyname(adresse);
herror("");
perror("");
strncpy( ip, inet_ntoa( *((struct in_addr *)addr_srv->h_addr )), 15);
printf("IP="%s"\n", ip);

return 0;

}

__________________________________________________________________________
Afficher la suite 
A voir également:

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
11
3
Merci
Argh, messages croisés !

Quand tu fais gethostbyname("google.com");, tu lui passe ni plus ni moins... Qu'une chaîne de caractère.

Ton problème est que fgets met le retour chariot dans adresse. Comme ça ça marche :
Mais bon, à voir si c'est beau...


<hr />
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include
#include <string.h>int main()
{
  struct hostent *addr_srv;
  struct in_addr addr;
  char adresse[255];
  int len;

  fgets(adresse, 255, stdin);
  len = strlen(adresse);
  adresse[len - 1] = 0;

  addr_srv = gethostbyname(adresse);

  addr.s_addr = *(u_long *) addr_srv->h_addr_list[0];
  printf("%s\n", inet_ntoa(addr));

  return 0;
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
54
Date d'inscription
mardi 25 mars 2008
Dernière intervention
15 août 2015
0
Merci
lol,

ca va jamais marcher comme ca!
tu dois demarer le socket avant!!!

WSAStartup(0x0101,&wsaDATA);
        socket_result = socket(PF_INET,SOCK_STREAM,0);
        server_ip = new char [strlen(ip)+1];
        strcpy(server_ip, ip);
        server_port = port;
        address.sin_family = AF_INET;
        address.sin_addr.s_addr = inet_addr(server_ip);
        address.sin_port = htons(server_port);

Vector_kiev
Commenter la réponse de nanonavich
Messages postés
31
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
25 février 2009
0
Merci
C'est sous linux. Il n'y à pas de de fonction WSA*******

Et la fonction fonctione très bien si je l'apelle comme ca:

                gethostbyname("google.com");
ou            gethostbyname("127.0.0.1");

Mais pas quand je lui passe une chaine de caractere en argument :(
Commenter la réponse de BloP68
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Dernière intervention
7 novembre 2014
11
0
Merci
Salut,

Sache, jeune nanonavich, qu'il n'y a pas que Windows dans la vie. En l'occurrence, #include <sys/..>, cela implique clairement que l'on est pas sous windows.

Bon alors à l'arrache... Le but était de le faire marcher... voilà ce que ça me donne. Il faudrait tester les valeurs de retours. Je teste l'host A.root-servers.net, qui est un host un peu particulier du net, et qui a pour adresse 198.41.0.4.

Exemple complet d'utilisation dans la msdn... A adapter bien sûr !


<hr />

#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include
#include <string.h>

int main()
{
  struct hostent *addr_srv;
  struct in_addr addr;

  addr_srv = gethostbyname("A.root-servers.net");

  addr.s_addr = *(u_long *) addr_srv->h_addr_list[0];
  printf("%s\n", inet_ntoa(addr));

  return 0;
}

 
Commenter la réponse de cs_rt15
Messages postés
31
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
25 février 2009
0
Merci
Merci rt15,
Bien vu c'est bien ce "putin" de retour à la ligne faudra que j'étudi plus le man la prochaine fois.
Je te remerci encore une fois rt15.

Merci a nanovich c'est sympa mais bon ya pas que windows ;)

Hop bonnes fêtes les gars.
Commenter la réponse de BloP68

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.