la conversion de l'hôte de la propriété intellectuelle par les sockaddr_in gethostname etc
j'ai besoin d'aide pour la conversion de nom d'hôte à la propriété intellectuelle et de l'insertion à sockaddr_in->sin_addr pour être en mesure de céder à char.
Par exemple, j'ai d'entrée: localhost et il me donne l'adresse 127.0.0.1
J'ai trouvé le code, mais je ne sais pas pourquoi il me donne de faux numéros
//---
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <time.h>
#include <sys/fcntl.h>
#include <netdb.h>
//---
///CZY WPISANO HOST
struct in_addr inaddr;
inaddr.s_addr = inet_addr(argv[1]);
if( inaddr.s_addr == INADDR_NONE) //if sHost is name and not IP
{
struct hostent* phostent = gethostbyname( argv[1]);
if( phostent == 0)
bail("gethostbyname()");
if( sizeof(inaddr) != phostent->h_length)
bail("problem z inaddr"); //error something wrong,
puts(argv[1]);
inaddr.s_addr = *((unsigned long*) phostent->h_addr);
//strdup( inet_ntoa(inaddr));
srvr_addr = inet_ntoa(adr_srvr.sin_addr);
puts(srvr_addr);
}
J'ai également écrit un code propre, mais je ne sais pas comment transférer de sockaddr à sockaddr_in de données:
///CZY WPISANO HOST
if(argv[1][0]>=(char)'a' && argv[1][0]<=(char)'Z')
{
struct hostent *hent;
hent = gethostbyname(argv[1]);
adr_srvr.sin_addr = (struct in_addr*)hent->h_addr_list;
}
adr_srvr est un char* type
J'ai vraiment besoin d'aide, merci!
OriginalL'auteur deadfish | 2011-03-26
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela:
J'ai écrit ce code directement à partir de mon mémoire donc je ne peux pas garantir que cela fonctionne, mais je suis assez sûr que ça devrait être OK.
gethostbyname
est obsolète et sera extrêmement problématique avec l'imminence de la transition vers ipv6. Toujours utiliser le modernegetaddrinfo
interface à la place.Ouais c'est vrai. Je seconde.
J'ai fait troisième. W. Richard Stevens, d'heureuse mémoire, dit la même chose,mais ma réponse (ci-dessous) était destiné à ne pas donner une solution clé en main, mais de suggérer une réponse à "je ne sais pas pourquoi il me donne de faux numéros".
OriginalL'auteur Athabaska Dick
Ce script shell compile corriger le code en C, qui, je crois, à faire ce que vous voulez:
La sortie j'ai eu ceci:
Espère que cette aide.
OriginalL'auteur Bill Evans at Mariposa