PDA

View Full Version : سوال: مشکل در چک کردن اتصال اینترنت



mtnam1372
شنبه 03 تیر 1391, 19:44 عصر
سلام
من قصد دارم چک کنم اینترنت وصله یا نه اگر وصل بود یه کاری رو انجام بده در غیر این صورت یه کار دیگه
از این کد استفاده میکنم


Ping ping = new Ping();
PingReply pingStatus = ping.Send("google.com");
if (pingStatus.Status == IPStatus.Success)
{


خوب اگر به اینترنت متصل باشیم که هیچ درست کار میکنه مشکل اینجاست که اگر به اینترنت متصل نباشیم برنامه بجای اینکه کار دوم رو انجام بده دچار مشکل میشه و خاتمه پیدا میکنه
به نظر شما چیکار کنم؟
کد بهتری هست؟

Farshid007
شنبه 03 تیر 1391, 20:09 عصر
try
{
Ping ping = new Ping();
PingReply pingStatus = ping.Send("google.com");
if (pingStatus.Status == IPStatus.Success)
{
MessageBox.Show("OK");
}


}
catch
{
MessageBox.Show("Error");
}

البته این راه از نظر برنامه نویسی صحیح نیست چون ممکنه که سرور های google داون باشه !خدا رو چی دیدی؟

Farshid007
شنبه 03 تیر 1391, 20:29 عصر
اینو خودم نوشتم تا اونجایی که تست کردم درست جواب داد:

bool checknet()
{
System.Net.NetworkInformation.NetworkInterface[] net = System.Net.NetworkInformation.NetworkInterface.Get AllNetworkInterfaces();
foreach (System.Net.NetworkInformation.NetworkInterface nnt in net)
{
if (nnt.NetworkInterfaceType == System.Net.NetworkInformation.NetworkInterfaceType .Ethernet)
{
return true;
}
}
return false;
}

mtnam1372
یک شنبه 04 تیر 1391, 09:49 صبح
عزیزم جواب اولت که همون مال خودمه خودمم بلد بودم مسیج باکسو بنویسم

جواب دومتم چه به اینترنت وصل باشیم چه نباشیم true برمیگردونه و این یعنی کار نمیکنه
در هر صورت ممنون

Saeed_m_Farid
یک شنبه 04 تیر 1391, 14:08 عصر
عزیزم جواب اولت که همون مال خودمه خودمم بلد بودم مسیج باکسو بنویسم...
ایشون با این کد مشکل شما رو که گفتی:

مشکل اینجاست که اگر به اینترنت متصل نباشیم برنامه بجای اینکه کار دوم رو انجام بده دچار مشکل میشه و خاتمه پیدا میکنه
حل کردن! یعنی اگه "خودتم بلد بودی مسیج باکسو بنویسی" حتماً بلد هستی بجاش یه return true یا return false هم بذاری ....
=============
این کار هزار تا راه حل داره که یکیش پینگ کردن هست، من دو سه تاش رو میگم، با هرکدوم حال میکنی، استفاده کن، فقط استفاده از wininet.dll یکم سریعتر هست (چون مال خود مایکروسافت هست!)، اون‌یکی ها رو هم با عوض کردن Timeout ها میتونی سریعتر کنی (یعنی نسبت به packet lost عمومی شبکه باید تنظیم بشن)، ولی قابلیت اطمینانشون هم میاد پایین ...

یکی استفاده از WinInet (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383630(v=vs.85).aspx) هست:

//Creating the extern function...
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState( out int Description, int ReservedValue );

//Creating a function that uses the API function...
public static bool IsConnectedToInternet( )
{
int Desc ;
return InternetGetConnectedState( out Desc, 0 ) ;
}


یکی هم استفاده از ارسال یه درخواست TCP (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx) به سایت موردنظر فرضی هست:

public static bool IsConnectedToInternet( )
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
IAsyncResult result = socket.BeginConnect("www.xxxxxxxxx.com", 80, null, null );
//Set for 3 sec timeout, you can change it ...
return (result.AsyncWaitHandle.WaitOne( 3000, true ));
}
finally
{
socket.Close();
}
}


یه راهش هم استفاده از ارسال درخواست HttpWebResponse (http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.aspx) هست:

public static bool IsConnectedToInternet( )
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com");
request.Timeout = 5000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

return (response.StatusCode == HttpStatusCode.OK);
}
catch (Exception ex)
{
//LogError("Error: " + ex.Message);
return false;
}
}

mtnam1372
یک شنبه 04 تیر 1391, 21:30 عصر
سلام
عزیز من خودم میتونم بنویسم ریترن یا چیکار بکنه برنامه
مشکلم اینجا بود که اگر الس هم می زاشتم و اینترنت قطع بود برنامه دچار مشکل میشه

یعنی حتی اگر براش بنویسی اگر وصل بود پیغام بده کانکت و اگر نه چا پ کن کانکت نیست

در صورت اتصال چاپ میکرد کانکت ولی اگر متصل نبودیم برنامه دچار مشکل میشد و بسته میشد

جالبه همینو سورس گذر هم گذاشته بود همین مشکل رو داشت
در هر صورت قصد جسارت نداشتم

Saeed_m_Farid
دوشنبه 05 تیر 1391, 01:00 صبح
بازم نگرفتی :متعجب:
اینهمه بحث نداره! "برنامه دچار مشکل میشه" چون از بلاک try...catch استفاده نکردی، تمام!
"در هر صورت قصد جسارت نداشتم" واقعاً که!!! (قول میدم سنّت پائینه اینقدر خودم خودم میکنی، کاش یکم واقع بین تر باشی...)