情况描述:
我用.NET写了一个客户端,每次启动的时候都要检测多个IP地址看是否通,通了连接最快返回值的那个IP,检测操作是用的异步方式处理的。在处理获得可用最快IP的过程中有一些漫长。
我需要判断IP,还要判断端口是否开启可用。
服务器端装在IIS上,因为使用的客户环境因素,需要做多条线路的端口映射,有些客户用的内网,有些用的外网,地址做了多个IP地址映射过来(有移动的,电信的,联通的)
问题:
想请教一下园子里面的大神,.NET的话除了PING检测网络有没有其他更高效检测的方法或者模式。
PS:我其实就写了个升级程序,启动的时候先调用个自己写的比较方法检测一下各个线路IP是否通顺。但效率太慢了。
用SendPingAsync来异步ping,带上超时时间,先一口气全部ping了,用Task.WaitAny获取最快的ping结果,所需的时间最大也就是你的超时时间了,慢不到哪儿去吧。
还可以用操作系统的InternetGetConnectedState函数本地系统的网络连接状态
using System.Runtime.InteropServices; namespace internet { public class Class1 { [DllImport("wininet.dll")] private extern static bool InternetGetConnectedState( out int connectionDescription, int reservedValue ) ; public Class1(){} private bool IsConnected() { int I=0; bool state = InternetGetConnectedState(out I,0); return state; } } }
Parallel.ForEach