gethostbyname()使用

来源:互联网 发布:c语言中match函数 编辑:程序博客网 时间:2024/06/16 16:11
#include<unistd.h>
#include<stdlib.h>
#include<errno.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string.h>
#include<netdb.h>

int getlocalip(char *ip)
{
    char host[100] = {0};
    struct hostent *hp;

    if (gethostname(host, sizeof(host)) < 0)
        return -1;

    if ((hp = gethostbyname(host)) == NULL)
        return -1;
    strcpy(ip, inet_ntoa(*(struct in_addr *)hp->h_addr_list[0]));

    return 0;
}

int main(void)
{
    char host[100] = {0};
    char ip[16] = {0};
    int i = 0;
    struct hostent *hp;
    struct sockaddr_in remote_addr;

    if (gethostname(host, sizeof(host)) < 0)
        exit(-1);

    if ((hp = gethostbyname(host)) == NULL)
        exit(-1);

    while (hp->h_addr_list[i] != NULL)
    {
        printf("%s\n", inet_ntoa(*(struct in_addr *)hp->h_addr_list[i]));
        i++;
    }

    getlocalip(ip);
    printf("local ip : %s\n" , ip);

    remote_addr.sin_addr.s_addr = inet_addr(ip);
    printf("1) %d\n" , remote_addr.sin_addr.s_addr);

    memcpy(&remote_addr.sin_addr.s_addr, (char*)(hp->h_addr_list[0]), 4);
    // memcpy(&remote_addr.sin_addr.s_addr, (char*)(hp->h_addr), 4);
    printf("2) %d\n" , remote_addr.sin_addr.s_addr);

    return 0;
}

原创粉丝点击