首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C gethostbyaddr返回NULL

C gethostbyaddr返回NULL
EN

Stack Overflow用户
提问于 2014-12-27 01:54:03
回答 1查看 775关注 0票数 0

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

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

这是我的服务器。c:

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2017-01-26 15:52:35

客户端是否有DNS条目-如果没有,则将其放入/etc/hosts中以测试- Ed Heal

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27660261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档