免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1879 | 回复: 4
打印 上一主题 下一主题

[网络] 应用程序如何得知网络状态,比如网络电缆没插好或者外网突然无法访问[已解决] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-14 22:44 |只看该作者 |倒序浏览
本帖最后由 crazyhadoop 于 2013-10-27 22:57 编辑

无论windows还是linux在状态栏上都有显示网络状态的图标,它可以反映出网络的一些状态。
而在应用程序中该如何检查网络状态并做好出错后的处理?
比如我拔下网络线缆或者路由器突然与外网失去连接亦或服务器突然当机,我的应用程序如何检测并后续处理?
如果每个网络应用程序都自己检查网络状态,是不是感觉大家都在做重复的事情?

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
2 [报告]
发表于 2013-10-15 16:51 |只看该作者
回复 1# yao3gang


    Linux 下可以用:
  1. // if_name like "ath0", "eth0". Notice: call this function // need root privilege. // return value: 
  2. // -1 -- error , details can check errno // 1 -- interface link up // 0 -- interface link down. 
  3. int get_netlink_status(const char *if_name) { 
  4.     int skfd;     struct ifreq ifr; 
  5.     struct ethtool_value edata;     edata.cmd = ETHTOOL_GLINK;     edata.data = 0; 
  6.     memset(&ifr, 0, sizeof(ifr)); 
  7.     strncpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name) - 1);     ifr.ifr_data = (char *) &edata; 
  8.     if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 )) < 0)         return -1; 
  9.     if(ioctl( skfd, SIOCETHTOOL, &ifr ) == -1)     { 
  10.         close(skfd);         return -1;     } 
  11.     close(skfd);     return edata.data; } 
复制代码
Windows下最简单的办法是使用InternetGetConnectedState,此外还可以使用wmi的方式检查MSNdis_MediaConnectStatus。或者GetAdaptersInfo+GetIfEntry并检查MIB_IFROW的dwOperStatus

论坛徽章:
0
3 [报告]
发表于 2013-10-19 22:06 |只看该作者
谢谢你的回复, 正是我需要的

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
4 [报告]
发表于 2013-10-20 19:59 |只看该作者
都需要做应用层心跳报文, 没办法.

论坛徽章:
4
亥猪
日期:2013-09-27 13:50:29酉鸡
日期:2013-10-09 13:08:59丑牛
日期:2013-10-20 11:16:47亥猪
日期:2013-10-26 11:50:59
5 [报告]
发表于 2013-10-26 11:52 |只看该作者
询问有搞移动端的么,是否也有发送心跳
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP