根据域名获取IP地址,并探测是否可达
/*
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地址,并探测是否可达的更多相关文章
- vc根据域名获取IP地址 gethostbyname()函数
以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数 int WSAStartup ( ...
- iOS根据域名获取ip地址
引入头文件 #include <netdb.h> #include <sys/socket.h> #include <arpa/inet.h> //根据域名获取ip ...
- linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int ...
- C# 根据域名获取IP地址
今天做海康微视视频接口的时候要用到硬盘录像机的IP地址.端口号.用户名和密码. 但是发现客户IP地址是动态获取的,经常变化. 所以需要根据域名解析出IP. 代码如下 //判断输入的是否是IP Rege ...
- 根据域名获取ip地址
1如何查询网站域名对应的ip地址在电脑左下角搜索cmd ,在命令提示符中输入 ping www.pm25.in在电脑左下角搜索运行,输入cmd ,在命令提示符中输入 ping www.pm25.in得 ...
- C++通过域名获取IP地址的方法;调试通过!
BOOL GetIpByDomainName(][],int *nCount) { WSADATA wsaData; ]; HOSTENT *pHostEnt; ; struct sockaddr_i ...
- 根据域名获取ip地址gethostbyname
#include <sys/socket.h> #include <stdio.h> #include <netdb.h> int main(int argc, c ...
- Java如何根据主机名(域名)获取IP地址?
在Java编程中,如何根据主机名(域名)获取IP地址? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将主机名更改为指定的IP地址. pac ...
- 获取 IP 地址
package j2se.core.net.base; import java.net.InetAddress;import java.net.UnknownHostException; public ...
随机推荐
- bzoj 2242: [SDOI2011]计算器
#include<cstdio> #include<iostream> #include<map> #include<cmath> #define ll ...
- ZOJ 3647 Gao the Grid dp,思路,格中取同一行的三点,经典 难度:3
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4837 三角形的总数=格子中任取3个点的组合数-同一横行任取3个点数目-同一纵行 ...
- 二模 (2) day2
第一题: 题目描述: 在一个长方形框子里,最多有 N(0≤N≤6)个相异的点.在其中任何-个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放 ...
- ubuntu下的第一个脚本file.sh
1.新建空文档,写入shell命令: #!/bin/sh cd /home/plg ./usb 第一行一定要有,一开始参考网上写的#!/usr/bin/sh,会提示错误 bash: ./file.sh ...
- Visual studio 2013安装及单元测试
vs安装过程 单元测试: 创建c#类库 创建单元测试 测试结果
- 记录一些容易忘记的属性 -- UIKeyboard
//UIKeyboardWillShowNotification这个通知在软键盘弹出时由系统发送 //UIKeyboardWillShowNotification 通知:键盘将要显示的通知 ...
- iOS开发之runtime运行时机制
最近参加三次面试都有被问到runtime,因为不太懂runtime我就只能支支吾吾的说点零碎.我真的好几次努力想看一看runtime的知识,因为知道理解它对理解OC代码内部变化有一定帮助,不过真心觉得 ...
- public protected default private
简单来说,如果让一个变量或者方法,只想让自己类中的访问,那么就将它们设置成private 如果你想让一个变量或者方法,本包中的类可以访问,而且子类也可访问,但是包外的缺不想让他访问.就设置成prote ...
- SVG 2D入门3 - 文本与图像
SVG中渲染文本 SVG的强大能力之一是它可以将文本控制到标准HTML页面不可能有的程度,而无须求助图像或其它插件.任何可以在形状或路径上执行的操作(如绘制或滤镜)都可以在文本上执行.尽管SVG的文本 ...
- ios--NSCalendar NSDateComponents
原文: ios时间那点事--NSCalendar NSDateComponents http://my.oschina.net/yongbin45/blog/156181 目录[-] iOS时间那点事 ...