zoukankan      html  css  js  c++  java
  • 打印getaddrinfo()返回的地址信息

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <netdb.h>
    #include "DieWithMessage.h"
    
    void PrintSocketAddress(const struct sockaddr *address, FILE *stream);
    
    int main(int argc, char *argv[])
    {
        if(argc != 3)
            DieWithUserMessage("Parameter(s)", "<Address/Name> <Port/Server>");
    
        char *addrString = argv[1];
        char *portString = argv[2];
    
        struct addrinfo addrCriteria;
        memset(&addrCriteria, 0, sizeof(addrCriteria));
    
        addrCriteria.ai_family = AF_UNSPEC;
        addrCriteria.ai_socktype = SOCK_STREAM;
        addrCriteria.ai_protocol = IPPROTO_TCP;
    
        struct addrinfo *addrList;
    
        int rtnVal = getaddrinfo(addrString, portString, &addrCriteria, &addrList);
    
        if(rtnVal != 0)
            DieWithUserMessage("getaddrinfo() failed", gai_strerror(rtnVal));
    
        struct addrinfo *addr;
        for(addr = addrList; addr != NULL; addr = addr->ai_next)
        {
            PrintSocketAddress(addr->ai_addr, stdout);
            fputc('\n', stdout);
        }
    
        freeaddrinfo(addrList);
    
        exit(0);
    }
    
    
    void PrintSocketAddress(const struct sockaddr *address, FILE *stream)
    {
        if(address == NULL || stream == NULL)
            return;
    
        void *numericAddress;
        char addrBuffer[INET6_ADDRSTRLEN];
        in_port_t port;
        switch(address->sa_family)
        {
            case AF_INET:
                numericAddress = &((struct sockaddr_in* ) address)->sin_addr;
                port = ntohs(((struct sockaddr_in *)address)->sin_port);
                break;
            case AF_INET6:
                numericAddress = &((struct sockaddr_in6 *)address)->sin6_addr;
                port = ntohs(((struct sockaddr_in6 *)address)->sin6_port);
                break;
            default:
                fputs("[unknown type]", stream);
                return;
        }
    
        if(inet_ntop(address->sa_family, numericAddress, addrBuffer, sizeof(addrBuffer)) == NULL)
            fputs("[invalid address]", stream);
        else
        {
            fprintf(stream, "%s", addrBuffer);
            if(port != 0)
                fprintf(stream, "-%u", port);
        }
    }
  • 相关阅读:
    IDEA tomcat热部署方法及乱码问题解决
    访问WEB-INF下JSP资源的几种方式(转)
    SpringMVC 静态资源处理
    SpringMVC中的拦截器
    SpringMVC中的异常处理
    SpringMVC实现文件上传
    IDEA 热部署
    响应数据和结果视图
    SpringMVC中的常用注解
    js获取当前根目录的方法
  • 原文地址:https://www.cnblogs.com/wouldguan/p/2770633.html
Copyright © 2011-2022 走看看