注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

网易考拉推荐

C++通过域名或主机获取IP  

2012-01-19 08:31:01|  分类: C++学习之路 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如何通过域名来获取IP地址呢,以下是C++的实现方法:

#include <stdafx.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <windows.h>


#pragma comment(lib, "ws2_32.lib")

 
int main(int argc, char  **argv)

   
    //-----------------------------------------
    
    // 定义初始化变量
    
    WSADATA wsaData;    
    int iResult;
    DWORD dwError;
    
    int i = 0;    
    struct hostent *remoteHost;    
    char *host_name;    
    struct in_addr addr;    
    char **pAlias;
    
    // 校验参数
    
    if (argc != 2) {        
        printf("usage: %s ipv4address\n", argv[0]);        
        printf(" or\n");        
        printf("       %s hostname\n", argv[0]);        
        printf("  to return the host\n");        
        printf("       %s 127.0.0.1\n", argv[0]);        
        printf("  to return the IP addresses for a host\n");        
        printf("       %s www.a3gs.com\n", argv[0]);        
        return 1;
    }
    
    // 初始化Winsock
    
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);    
    if (iResult != 0) {        
        printf("WSAStartup failed: %d\n", iResult);        
        return 1;        
    }

    host_name = argv[1];
    // 如果用户输入是一个字母, 则我们使用gethostbyname()函数
    // 假如输入是数字,则判断为IP地址
    if (isalpha(host_name[0])) {    
        printf("Calling gethostbyname with %s\n", host_name);        
        remoteHost = gethostbyname(host_name);    
    } else {        
        printf("使用%s调用gethostbyaddr函数%s\n", host_name);    
        addr.s_addr = inet_addr(host_name);    
        if (addr.s_addr == INADDR_NONE) {        
            printf("请输入有效IPv4地址\n");    
            return 1;    
        } else    
           
            remoteHost = gethostbyaddr((char *) &addr, 4, AF_INET);    
        }
    }
    if (remoteHost == NULL) {    
        dwError = WSAGetLastError();    
        if (dwError != 0) {    
            if (dwError == WSAHOST_NOT_FOUND) {        
                printf("无法定位到主机\n");
                return 1;
            }else if (dwError == WSANO_DATA) {        
                printf("无路由记录\n");    
                return 1;    
            } else {
                printf("函数调用出错,代码: %ld\n", dwError);
                return 1;    
            }
        }
    } else {
        printf("函数返回:\n");
        printf("\t主机名称: %s\n", remoteHost->h_name);
        for (pAlias = remoteHost->h_aliases; *pAlias != 0; pAlias++) {
            printf("\t主机别名#%d: %s\n", ++i, *pAlias);
        }
        printf("\t地址类型: ");
        switch (remoteHost->h_addrtype) {
        case AF_INET:    
            printf("AF_INET\n");
            break;
        case AF_INET6:
            printf("AF_INET6\n");
            break;
        case AF_NETBIOS:
            printf("AF_NETBIOS\n");
            break;
        default:
            printf(" %d\n", remoteHost->h_addrtype);
            break;
        }
        printf("\t地址长度: %d\n", remoteHost->h_length);      
        i = 0;
        while (remoteHost->h_addr_list[i] != 0) {
            addr.s_addr = *(u_long *) remoteHost->h_addr_list[i++];
            printf("\t主机IP地址#%d: %s\n", i, inet_ntoa(addr));
          
    }
    return 0;
}

  评论这张
 
阅读(3013)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017