分享

inet_pton

 海漩涡 2016-06-24
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <arpa/inet.h> 
 
int  
main(int argc, char **argv) 

    unsigned char buf[sizeof(struct in6_addr)]; 
    int domain, s; 
    char str[INET6_ADDRSTRLEN]; 
 
    if(argc != 3){ 
        fprintf(stderr, "usage: %s {i4|i6|<num>} string\n", argv[0]); 
        exit(EXIT_FAILURE); 
    } 
 
    domain = (strcmp(argv[1], "i4") == 0) ? AF_INET:(strcmp(argv[1], "i6") == 0) ? AF_INET6 : atoi(argv[1]); 
     
    //IP字符串 ——》网络字节流 
    s = inet_pton(domain, argv[2], buf); 
    if(s<=0){ 
        if(0 == s) 
            fprintf(stderr, "Not in presentation format\n"); 
        else 
            perror("inet_pton"); 
        exit(EXIT_FAILURE); 
    } 
 
    //网络字节流 ——》IP字符串 
    if(inet_ntop(domain, buf, str, INET6_ADDRSTRLEN) == NULL){   
        perror("inet ntop\n"); 
        exit(EXIT_FAILURE); 
    } 
 
    printf("%s\n", str); 
    exit(EXIT_SUCCESS); 
}



===============================================================



#include <stdio.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <string.h> 

int main(int argc, char *argv[]) 

    char ip1[] = "192.168.0.74"; 
    char ip2[] = "211.100.21.179"; 
    struct in_addr addr1, addr2; 
    long l1, l2; 
    l1 = inet_addr(ip1);   //IP字符串——》网络字节 
    l2 = inet_addr(ip2); 
    printf("IP1: %s\nIP2: %s\n", ip1, ip2); 
    printf("Addr1: %ld\nAddr2: %ld\n", l1, l2); 
     
    memcpy(&addr1, &l1, 4); //复制4个字节大小 
    memcpy(&addr2, &l2, 4); 
    printf("%s <--> %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意:printf函数自右向左求值、覆盖 
    printf("%s\n", inet_ntoa(addr1)); //网络字节 ——》IP字符串 
    printf("%s\n", inet_ntoa(addr2)); 
    return 0; 
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多