سلام ،
یک روش اینست که از تابع API به نام InternetGetConnectedState استفاده نمایید که مقدار بازگشتی آن از نوع Boolean بوده و در صورت اتصال مقدار True و عدم اتصال مقدار False را برمیگرداند :
[Flags]
enum ConnectionState : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
[DllImport("wininet", CharSet = CharSet.Auto)]
static extern bool InternetGetConnectedState(ref ConnectionState lpdwFlags,
int dwReserved);
static bool IsOffline()
{
ConnectionState state = 0;
InternetGetConnectedState(ref state, 0);
if (((int)ConnectionState.INTERNET_CONNECTION_OFFLINE & (int)state) != 0)
{
return true;
}
return false;
}
//http://69.10.233.10/KB/IP/pingdotnet.aspx
برای پینگ کردن یک آدرس خاص نیز میتوانید از کلاس
System.Net.NetworkInformation.Ping و متد Send استفاده نمایید که IP یا آدرس مورد نظر را به عنوان ورودی دریافت میکند و مقداری از نوع کلاس PingReply برمیرگرداند که خود دارای یک پروپرتی از نوع ثابت شمارشی IPStatus به نام Status یوده و درصورتیکه برابر با IPStatus.Success باشد ، آدرس مورد نظر بدون هیچ مشکلی در دسترس میباشد :
مثالی از MSDN :
public static void SimplePing ()
{
Ping pingSender = new Ping ();
PingReply reply = pingSender.Send ("www.contoso.com");
if (reply.Status == IPStatus.Success)
{
Console.WriteLine ("Address: {0}", reply.Address.ToString ());
Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
}
else
{
Console.WriteLine (reply.Status);
}
}