C gethostbyaddr返回NULL

时间:2014-12-26 17:54:03

标签: c sockets

我真的是C和套接字的初学者。我知道我不应该使用gethostbyaddr这是一个考试所以我必须使用他们告诉我使用的... 我正在使用Linux机器上的代码(Ubuntu 14.04)。

我正在尝试编写echo c / s程序。一切正常,但当我尝试从服务器获取有关客户端的一些信息时,struct hostent * clienthost为空。

这是我的server.c:

int main(int argc, char * argv[])
{
    struct sockaddr_in cliaddr, servaddr;
    struct hostent * clienthost;
    int port, sd, len;
    char request[MAX_LENGTH];
    const int on = 1;

    port = atoi(argv[1]);

    memset ((char *)&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = INADDR_ANY;  
    servaddr.sin_port = htons(port);

    sd=socket(AF_INET, SOCK_DGRAM, 0);
    setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    bind(sd,(struct sockaddr *) &servaddr, sizeof(servaddr));

    for (;;)
    {
        len = sizeof(request);
        recvfrom(sd, request, sizeof(request), 0, (struct sockaddr *) &cliaddr, &len);

        clienthost = gethostbyaddr( (char *) &cliaddr.sin_addr, sizeof(cliaddr.sin_addr), AF_INET);
        if (clienthost == NULL) 
            printf("client host information not found\n");
        else 
            printf("Operation from: %s %i\n", clienthost->h_name,(unsigned)ntohs(cliaddr.sin_port));

        sendto(sd, &request, sizeof(request), 0, (struct sockaddr *)&cliaddr, len);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

客户端是否有DNS条目 - 如果没有在/etc/hosts中进行测试                      - Ed Heal