首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打印端口号的值?

如何打印端口号的值?
EN

Stack Overflow用户
提问于 2019-09-23 03:31:13
回答 1查看 435关注 0票数 0

尝试让程序返回IP地址和端口号,这样我就可以创建一个有效的TCP客户机/服务器程序。目前正在努力使用函数getaddrinfo(),并理解函数中的第二个参数是指定端口号的参数。我可以让它返回一个IP,但不能让它返回一个端口号。我正在输入主机名和端口指定(例如http或telnet),并试图获取与其相关联的IP地址和端口号。

除了指定“AI_NUMERICSERV”和"telnet“之外,我还尝试在ai.flags中输入端口号的数值。只是第一次尝试理解网络编程。

代码语言:javascript
复制
int main(int argc, char **argv){
    struct addrinfo hints, *res, *p;
    int status;
    char ipstr[INET_ADDRSTRLEN];

    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    //  hints.ai_flags = AI_NUMERICSERV;//leaving this off for now

    if((status = getaddrinfo(argv[1], argv[2], &hints, &res)) != 0) 
    {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
        return 2;
    }
    `for(p = res; p != NULL; p = p->ai_next)
    {        
    void *addr;

    struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
    addr = &(ipv4->sin_addr);
    inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);
    printf("%s\n", ipstr);
    }

    printf("IP addresses for %s:\n\n", argv[1]); //displays IP correctly
    printf("Port for %s: ", argv[2]); // doesn't display port number
    freeaddrinfo(res);

    return 0;
}

我一直期望在IP地址输出旁边输出端口号,但我总是只得到IP地址,而不是端口号。

EN

回答 1

Stack Overflow用户

发布于 2019-09-23 03:51:50

您需要读取res->ai_addr返回的端口...

代码语言:javascript
复制
printf("port=%h\n", ntohs(((struct sockaddr_in*)(res->ai_addr)) ->sin_port));

如果您只是想找出哪些端口与特定服务相关联,并且您在*nix主机上,那么您也可以只使用grep /etc/services

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

https://stackoverflow.com/questions/58052740

复制
相关文章

相似问题

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