Проверка соединения с интернет/сервером - 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);
}