如何使用 .NET 实现高效的网络连接性检查?

咨询区

  • Mohit Deshpande

我的项目有一个需求,需要检查网络的连通性,请问是否有高效的方式去实现?

回答区

  • Leo

虽然并不能完全可靠的实现网络连通性检查,因为你不能保证目标机永远在线,相比来说更高效的方式是用 Ping协议 而不是 Http协议,比如说你可以不断的 ping google.com,参考如下代码:

public static bool Isconnected = false;public static bool CheckForInternetConnection()
{try{Ping myPing = new Ping();String host = "google.com";byte[] buffer = new byte[32];int timeout = 1000;PingOptions pingOptions = new PingOptions();PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);if (reply.Status == IPStatus.Success){return true;}else if (reply.Status == IPStatus.TimedOut){return Isconnected;}else{return false;}}catch (Exception){return false;}
}public static void CheckConnection()
{if (CheckForInternetConnection()){Isconnected = true;}else{Isconnected = false;}
}
  • Jeshurun

android 手机也有检测 WIFI 连通性的代码,它非常高效的抓取 Google 首页,相应的 java 代码如下:

public static boolean hasInternetAccess(Context context) {if (isNetworkAvailable(context)) {try {HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection());urlc.setRequestProperty("User-Agent", "Android");urlc.setRequestProperty("Connection", "close");urlc.setConnectTimeout(1500); urlc.connect();return (urlc.getResponseCode() == 204 &&urlc.getContentLength() == 0);} catch (IOException e) {Log.e(TAG, "Error checking internet connection", e);}} else {Log.d(TAG, "No network available!");}return false;
}

转成 C# 代码的话,大概如下:

var request = (HttpWebRequest)WebRequest.Create("http://g.cn/generate_204");
request.UserAgent = "Android";
request.KeepAlive = false;
request.Timeout = 1500;using (var response = (HttpWebResponse)request.GetResponse())
{if (response.ContentLength == 0 && response.StatusCode == HttpStatusCode.NoContent){//Connection to internet available}else{//Connection to internet not available}
}

点评区

这个功能在带 GUI 的程序中大多属于刚需功能, ping 判断连通性是一个好办法,学习了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-popover超过固定高度后出现滚动条_「测绘精选」RTK测量不出现固定解的原因...

摘要:在日常RTK测量的应用中,时常不出现固定解的情况,导致测量测绘工作无法按时完成或者测量测绘结果精度无法保证。本文将从基准站、移动站、数据链等三个方面进行分析。随着卫星定位技术的快速发展,人们对快速高精度位置信息的需…

史上最牛物理科普

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

在Android中afinal框架下实现sqlite数据库版本升级的办法

上一篇文章采用的是SQLiteOpenHelper中的onUpgrade方法实现数据库的升级。 首先获取Context: private Context mContextthis; 然后实现FinalDb内的静态方法: FinalDb.create(mContext,"afinal.db",true,2,this); 实现FinalDb的DbUpdateListe…

MySQL备份原理详解

备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关…

计时器小程序——由浅入深实例讲解

本菜在实现简单的计时器过程中遇到问题的一些成长笔记,有不完整观点的话请多多见谅,也看了众多大神的博客才整理的笔记,下面来实现个人写的小程序。 首先第一个实例(很简单): winform窗体包含两个控件&…

linux c之通过管道实现兄弟间进程通信:

1、兄弟间进程通信: 父进程创建管道,并使用fork函数创建2个进程,在第一个子进程发消息到第二个子进程,第2个子进程读取消息并处理,在父进程中不使用管道通信,所以什么都不做,直接关闭管道两端并…

理解 Azure AD 安全默认值设置

为了保护广大的Microsoft 365用户的安全,Azure AD在某些情况下会启用安全默认值,就是要求所有的账号都启用MFA。MFA的全称是 Multi-factor Authentication,中文翻译为多因子身份验证,就是说除了账号密码之外,添加额外的…

mongodb spring 超时时间_拥抱NoSQL--谈Spring Data MongoDB的简单使用

先说说MongoDB是什么。MongoDB官网也有各语言所用的API,当然也有Java的了。但是平日写的东西大部分是基于Spring框架的,自然希望对于数据库的操作也在Spring的掌控之下。前几日才Spring的官网看到了SPRING DATA MONGODB,对此很感兴趣稍微试了…

能抗 6 级风的「拇指伞」,晴雨两用、揣兜就走!

▲ 点击查看每到这个季节,天气就开始对人类不友好了:要么万里无云,紫外线爆表;要么忽然乌云密布,狂风暴雨。出门带伞,谁不知道,说着简单,可是普通的雨伞大小很尴尬,手里不…

SecureCRT 中 python 命令行使用退格键(backspace)出现 ^H 解决办法

选项-->会话选项-->映射键 勾选“其他映射”中的两个选择框 转载于:https://www.cnblogs.com/RUReady/p/6165289.html

设计模式:策略模式

本文翻译自Design Patterns: The Strategy Pattern 目前为止我们已经在这个系列中接触了三个设计模式。我们定义了4种类型的设计模式。在这篇文章中,我将讲解 策略模式,这是属于行为类别的设计模式的。 你可能会有一个疑问:我们什么时候该使用…

云计算基本概念

IT技术行业最不缺少的就是概念的炒作,今天出来个新技术名词,明天又出来个新技术名词,搞的从业人员焦虑不堪,生怕被这个时代所抛弃;但是人的精力是有限的,不可能什么都去学习,与其整天被这一帮发…

通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存...

很久没有更新dapr系列了。今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star目录:一、通过Dapr实现一个简单的基于.net的微服务电商…

geotif 添加坐标_python – 如何获取geotif中单元格的坐标?

使用仿射变换矩阵,将像素坐标映射到世界坐标.例如,使用affine包. (还有其他方法可以使用简单的数学方法.)from affine import Affinefname /path/to/raster.tif以下是获得仿射变换矩阵T0的两种方法.例如,使用GDAL / Python:from osgeo import gdalds gdal.Open(pa…

年纪都这么大了,还在倒班工作......

1 这么大年纪都在倒班工作(素材来源网络,侵删)▼2 原来,这就是命啊(素材来源网络,侵删)▼3 天啊,都是什么狗血剧情?(素材来源网络,侵删&#xf…

VB中使用GDI+进行图像缩放的实例

VISUAL BASIC(VB)对图形图像的处理一直以来是弱项,并受到很多人的垢病。关于图形图像的放大缩小,一般使用PICTUREBOX的PAINTPICTURE方法来处理。但这个处理方法最大的问题就是图像的失真。比方说图像中原来有网格线的,…

javascript的关于刷新页面给出提示框的代码

// 页面刷新事件 ,或者关闭事件的3中方法!测试都可以!参考官方文档: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers.onbeforeunloadhttps://developer.mozilla.org/en-US/docs/Web/API 方法1:window.onb…

JavaScript格式化数字显示格式

为什么80%的码农都做不了架构师?>>> JavaScript格式化数字显示格式 /** * 格式化数字显示方式 * 用法 * formatNumber(12345.999,#,##0.00); * formatNumber(12345.999,#,##0.##); * formatNumber(123,000000); * param num * param pattern */ func…

linux c之使用#define定义多行函数总结

1、用 define的特点 函数:会带来额外的开销,开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈,这种开销大,函数的参数必须被声明为一种特定的类型。 宏定义:代…