PDA

View Full Version : تست connect بودن به اینترنت



samane658
چهارشنبه 04 اردیبهشت 1387, 11:27 صبح
سلام دوستان
یه برنامه local دارم که توش باید یه اطلاعاتی رو توی سایت بفرستم.من واسه تست connect بودن یه بار connection رو باز و بسته می کنم . اونو تو try گذاشتم که اگه connect نبود بهم بگه.
حالا سوالم اینه که کسی روش بهتر و مهندسی تری سراغ داره؟ اگه اره ممنون می شم به منم بگید.

thanks and have a nice Time

sinpin
چهارشنبه 04 اردیبهشت 1387, 12:20 عصر
روشهای زیادی وجود داره. مثلا اگر اینترنت دایل آپ است به کمک دستور RasDial و یا با استفاده از کلاسهای دات نت فریمورک و ...

اما یک راه ساده هم هست و اونهم پینگ کردن و پاسخ گرفتن از یکی از سرورهای همیشه فعال در اینترنت (مانند 4.2.2.1) و یا از همان سایت موردنظر شماست است.

علیرضا مداح
چهارشنبه 04 اردیبهشت 1387, 12:32 عصر
سلام ،
یک روش اینست که از تابع 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 (http://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);
}
}

smt_414
چهارشنبه 04 اردیبهشت 1387, 13:49 عصر
سلام
دوستان جواب این سوال رو دادند
این هم یه جواب
این قطعه کد رو داخل همین بخش دیدم و خاطرم نیست کی زحمتش رو کشیده بود


//بررسی اتصال به اینترنت
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
//Creating a function that uses the API function...
bool IsConnectedToInternet()
{
bool a;
int Desc;
a=InternetGetConnectedState(out Desc, 0);
return a;
}

موفق باشید

sinpin
چهارشنبه 04 اردیبهشت 1387, 13:53 عصر
@ smt_414 (http://barnamenevis.org/forum/member.php?u=15482)
خوبه که چنین نکاتی رو - جهت ارجاعات بعدی - به تاپیک "1001 نکته در سی شارپ" هم اضافه کنید.

موفق باشید.

Sal_64
چهارشنبه 04 اردیبهشت 1387, 13:55 عصر
.من واسه تست connect بودن یه بار connection رو باز و بسته می کنممنظور شما کانکشن اینترنت خود ویندوز؟
چه شکلی ؟

samane658
چهارشنبه 04 اردیبهشت 1387, 14:20 عصر
ممنون از کمکتون. واقعا ممنونم.
1.میشه وقتی connect شدیم پهنای باند رو هم چک کرد؟
2.یه سوال دیگه ایا منطقیه که واسه update کردن یه database رو اینترنت اونم از روی local نشه از dial up استفاده کرد؟ یعنی حتما باید ADSl داشت.(البته از نظر خودم این غیر منطقیه و تفاوتشون فقط تو سرعت انتقال است ،مطمئن شدن از این موضوع باعث ارتقای نرم افزارم میشه)
اینم جواب دوستمون Sal_64 :

نه connectioni رو که تو کد برنامه برای اتصال به اینترنت ساختم




[ public static string internetConnectionString = "server= IP + ";database=sss;integrated security=true

public bool isConnect
{
try
{
internetConnection.Open();
internetConnection.Close();
}
catch (Exception ex) { return false; }
return true;
}

PC2st
چهارشنبه 04 اردیبهشت 1387, 15:00 عصر
به کمک استفاده از event های کلاس System.Net.NetworkInformation.NetworkChange و متدهای کلاس System.Net.NetworkInformation.NetworkInterface میشه از هر وضعیتی در شبکه با خبر شد.