Проверка соединения с интернет/сервером - C#
Формулировка задачи:
Добрый вечер. Прошу помочь разобраться в проблеме. В программе, перед выполнением все остальных действий идет проверка, вначале на связь с интернетом, а потом на связь с сервером. Поискав на форуме подобные темы нашел замечательно работающий код с отдельным классом:
класс
Но как всегда есть но..... подскажите пожалуйста как переделать код так, чтоб тело программы не выполнялось дольше пока связь не будет установлена. Мне в голову приходит идея с while (false) Console.WriteLine("Соединение с интернетом не найдено"), но там не к чему привязать.... если можно - помогите. Спасибо.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace phoneinfo { class Program { static void Main(string[] args) { if (Internet.CheckConnection()) Console.WriteLine("Соединение с интернетом найдено"); else Console.WriteLine("Соединение с интернетом не найдено"); Console.ReadKey(); } } }
using System; using System.IO; using System.Net; using System.Net.NetworkInformation; using System.Runtime.InteropServices; namespace phoneinfo { public static class Internet { [DllImport("wininet.dll")] static extern bool InternetGetConnectedState(ref InternetConnectionState lpdwFlags, int dwReserved); [Flags] enum InternetConnectionState : 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 } static object _syncObj = new object(); /// <summary> /// Проверить, есть ли соединение с интернетом /// </summary> /// <returns></returns> public static Boolean CheckConnection() { lock (_syncObj) { try { InternetConnectionState flags = InternetConnectionState.INTERNET_CONNECTION_CONFIGURED | 0; bool checkStatus = InternetGetConnectedState(ref flags, 0); if (checkStatus) return PingInternet(new string[] { @"google.com", @"microsoft.com", @"ibm.com" }); return checkStatus; } catch { return false; } } } /// <summary> /// Пингует сервера, при первом получении ответа от любого сервера возвращает true /// </summary> /// <param name="InternetList">Список серверов</param> /// <returns></returns> public static bool PingInternet(string[] InternetList) { bool haveAnInternetConnection = false; Ping ping = new Ping(); for (int i = 0; i < InternetList.Length; i++) { PingReply pingReply = ping.Send(InternetList[i]); haveAnInternetConnection = (pingReply.Status == IPStatus.Success); if (haveAnInternetConnection) break; } return haveAnInternetConnection; } } }
Я извиняюсь за ап.... но мне кто-нибудь может ответить? Или я не по теме, или вопрос слишком легкий/сложный.
Решение задачи: «Проверка соединения с интернет/сервером»
textual
Листинг программы
while(true) { if (Internet.CheckConnection()) { .... } Thread.Sleep(3000); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д