Gethostbyname [Résolu]

BloP68 31 Messages postés dimanche 5 décembre 2004Date d'inscription 25 février 2009 Dernière intervention - 25 déc. 2008 à 23:26 - Dernière réponse : BloP68 31 Messages postés dimanche 5 décembre 2004Date d'inscription 25 février 2009 Dernière intervention
- 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 

Votre réponse

5 réponses

Meilleure réponse
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 26 déc. 2008 à 18:21
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;
}

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_rt15
nanonavich 54 Messages postés mardi 25 mars 2008Date d'inscription 15 août 2015 Dernière intervention - 26 déc. 2008 à 17:47
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
BloP68 31 Messages postés dimanche 5 décembre 2004Date d'inscription 25 février 2009 Dernière intervention - 26 déc. 2008 à 18:13
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
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 26 déc. 2008 à 18:15
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
BloP68 31 Messages postés dimanche 5 décembre 2004Date d'inscription 25 février 2009 Dernière intervention - 26 déc. 2008 à 18:45
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.