/*
  Author  :decwang@2014.09.01
  Mail   :deworks@sina.com
*/
#define PRINTLOG printf
//返回0表示成功,其他为失败.
int getIpAddressByGetAddrInfo(const char* address,char* realIP,int maxLen)
{
if (NULL == address || NULL == realIP)
{
PRINTLOG("param address wrong\n");
return -;
}
struct addrinfo *answer = NULL, hint, *curr = NULL;
bzero(&hint, sizeof(hint));
hint.ai_family = AF_INET;
hint.ai_socktype = SOCK_STREAM;
int ret = getaddrinfo(address, NULL, &hint, &answer);
if (ret != )
{
PRINTLOG("error on getaddrinfo: ret: %s\n",gai_strerror(ret));
return -;
}
for (curr = answer; curr != NULL; curr = curr->ai_next)
{
inet_ntop(AF_INET,&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr),realIP, maxLen);
PRINTLOG("realIP is %s\n", realIP);
break;
}
freeaddrinfo(answer);
return ;
}
//返回1表示网络可达,返回其他为失败
int isReachable(const char* address,int port,int timeout)
{
if (NULL == address)
{
PRINTLOG("param address wrong\n");
return -;
}
if (timeout <= )
{
PRINTLOG("param timeout wrong\n");
return -;
}
struct sockaddr_in server_addr;
char realIP[];
memset(realIP,,sizeof(realIP));
int nRet = getIpAddressByGetAddrInfo(address, realIP, -);
if (nRet != )
{
PRINTLOG("get real ip address failed\n");
return -;
}
if (port >= || port <= )
{
PRINTLOG("port invalid\n");
return -;
} int sockfd = socket(AF_INET, SOCK_STREAM, );
if(sockfd < )
{
PRINTLOG("create socket failed\n");
return -;
} memset(&server_addr, , sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = inet_addr(realIP); int error=-, len;
len = sizeof(int);
struct timeval tm;
fd_set set;
fcntl(sockfd, F_SETFL, O_NONBLOCK);
if( connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) ==-)
{
tm.tv_sec = timeout;
tm.tv_usec = ;
FD_ZERO(&set);
FD_SET(sockfd, &set);
if( select(sockfd+, NULL, &set, NULL, &tm) > )
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
if(error == )
nRet = ;
else
nRet = ;
}
else
nRet = ;
}
else
nRet = ;
close( sockfd );
return nRet;
}

这段代码是为了修正之前的iOS上的双网络连接探测用的,之前的SCNetWork对网络的状态判断存在,故干脆采用直接连接的方式进行判断

 
 
 

根据域名获取IP地址,并探测是否可达的更多相关文章

  1. vc根据域名获取IP地址 gethostbyname()函数

    以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数                int WSAStartup                       (         ...

  2. iOS根据域名获取ip地址

    引入头文件 #include <netdb.h> #include <sys/socket.h> #include <arpa/inet.h> //根据域名获取ip ...

  3. linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换

    用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int ...

  4. C# 根据域名获取IP地址

    今天做海康微视视频接口的时候要用到硬盘录像机的IP地址.端口号.用户名和密码. 但是发现客户IP地址是动态获取的,经常变化. 所以需要根据域名解析出IP. 代码如下 //判断输入的是否是IP Rege ...

  5. 根据域名获取ip地址

    1如何查询网站域名对应的ip地址在电脑左下角搜索cmd ,在命令提示符中输入 ping www.pm25.in在电脑左下角搜索运行,输入cmd ,在命令提示符中输入 ping www.pm25.in得 ...

  6. C++通过域名获取IP地址的方法;调试通过!

    BOOL GetIpByDomainName(][],int *nCount) { WSADATA wsaData; ]; HOSTENT *pHostEnt; ; struct sockaddr_i ...

  7. 根据域名获取ip地址gethostbyname

    #include <sys/socket.h> #include <stdio.h> #include <netdb.h> int main(int argc, c ...

  8. Java如何根据主机名(域名)获取IP地址?

    在Java编程中,如何根据主机名(域名)获取IP地址? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将主机名更改为指定的IP地址. pac ...

  9. 获取 IP 地址

    package j2se.core.net.base; import java.net.InetAddress;import java.net.UnknownHostException; public ...

随机推荐

  1. 北邮新生排位赛1解题报告d-e

    话说cdsn要是前面插入源代码又什么都不放就会出现奇怪的源代码?不知道是哪个网页的 407. BLOCKS 时间限制 1000 ms 内存限制 65536 KB 题目描述 给定一个N∗M的矩阵,求问里 ...

  2. POJ 1850 Code 字符串 难度:1

    题意: 1 如果是严格升序的字母字符串,那么可以输出非0解码,否则不能译码输出0 2 字符串解码 遵循递增原则,其值为 到现在为止的所有按字母序小于该字符串的数量 + 1; #include < ...

  3. checkbox全选功能

    $("#cb_classType_all").change(function () { if ($(this).is(":checked")) { $(&quo ...

  4. wdcp升级php版本到5.3,5.5

    官网省级方法 wget http://down.wdlinux.cn/in/php_up53.shsh php_up53.sh 看到"php update is OK"提示表示,顺 ...

  5. 设置AFNetworking网络请求的超时时间

    http://www.mamicode.com/info-detail-511816.html // 设置超时时间 [manager.requestSerializer willChangeValue ...

  6. 开通了cnblogs

    受够了百度空间,换个地方,或许会更好. 以后有机会会将百度空间你的文章搬过来的.

  7. [开发笔记]-获取歌曲ID3信息

    ID3介绍: ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版. 获 ...

  8. zoj 2112 动态区间求第k大

    题目大意: 动态单点更新,然后多次询问求区间内第k大 这里单个的主席树不能实现,这里采取的是树状数组套主席树 首先可以想的是将静态主席树先构建好,不去动它,这里空间复杂度就是O(nlogn),这个只要 ...

  9. [转] C中的位域

    一.位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一 ...

  10. SSH(1)

    假定服务器ip为192.168.1.139,ssh服务的端口号为22,服务器上有个用户为pi,两边都是ubuntu 一,Init *安装 如果是想用ssh从本机登陆别的机器,只需要安装openssh- ...