2009-09-10 9 views
2

J'ai utilisé le code suivant pour vérifier la connexion Internet, il fonctionne parfaitement sans pare-feu & proxy. comment puis-je vérifier la connexion réseau dans le pare-feu & mode proxy. S'il vous plaît aidez-moicomment vérifier netconnection dans l'environnement de pare-feu et de proxy dans C#

private static ManualResetEvent connectDone = new ManualResetEvent(false); 
public static bool IsInternetConnected() 
{ 
    int Desc; 
    string[] sitesList = { "www.google.co.in", "www.microsoft.com", "www.sun.com" }; 
    bool status; 
    status = InternetGetConnectedState(out Desc, 0); 
    if (status) 
    { 
     try 
     { 
     connectDone.Reset(); 
     TcpClient client = new TcpClient(); 

     client.BeginConnect(sitesList[0], 80, new AsyncCallback(ConnectCallback), client); 
     connectDone.WaitOne(1000, false); 
     if (client.Connected) 
     status = true; 
     else 
     status = false; 
     client.Close(); 
     } 
     catch (System.Exception ex) 
     { 
     BringDebug.WriteToLog("BringNet", "IsInternetConnected", ex.Message); 
     return false; 
     } 
    } 
    else 
    { 
     return false; 
    } 

    return status; 
} 

private static void ConnectCallback(IAsyncResult ar) 
{ 
    try 
    { 
     TcpClient client1 = (TcpClient)ar.AsyncState; 
     client1.EndConnect(ar); // Complete the connection. 
     connectDone.Set(); // trigger the connectDone event 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.ToString()); 
    } 
} 

Répondre

5

Si vous utilisez WebRequest au lieu de TcpClient, il doit utiliser le proxy par défaut du système, etc. Il va également être moins de code :)

Par exemple:

using System; 
using System.Net; 

class Test 
{ 
    static void Main() 
    { 
     var request = (HttpWebRequest)WebRequest.Create("http://www.google.com"); 
     request.Timeout = 1000; 

     try 
     { 
      using (var response = request.GetResponse()) {} 
      Console.WriteLine("Success"); 
     } 
     catch (WebException) 
     { 
      Console.WriteLine("No connection"); 
     } 
    } 
} 
+0

merci pour votre réponse, mais je pense que c'est une méthode plus lente que la précédente, y at-il une idée pour accélérer –

+0

Quand vous dites que vous * pensez * c'est plus lent - l'avez-vous mesuré? Certes, il va chercher une réponse plutôt que de simplement se connecter, mais je m'attends à ce qu'il soit * adéquatement * rapide. –

+0

(Une option pour l'accélérer en passant, au prix d'une certaine complexité: faire les trois requêtes en parallèle.) –