преобразование хоста в ip с помощью sockaddr_in gethostname и т. д.

Мне нужна помощь в преобразовании имени хоста в ip и вставке в sockaddr_in-> sin_addr, чтобы можно было назначить char. Например, я ввожу: localhost, и он дает мне 127.0.0.1

Я нашел код, но не знаю, почему он дает мне неправильные числа

//---
#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);
        }

Я также написал собственный код, но я не знаю, как передать данные из sockaddr в данные sockaddr_in:

///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 - это тип char *

Мне действительно нужна помощь, спасибо!

5
задан deadfish 27 March 2011 в 17:46
поделиться