Как проверить NetConnection в среде брандмауэра и прокси в C # - PullRequest
2 голосов
/ 10 сентября 2009

Я использовал следующий код для проверки интернет-соединения, он отлично работает без брандмауэра и прокси. Как проверить сетевое соединение в режиме брандмауэра и прокси. пожалуйста, помогите мне

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());
    }
}

1 Ответ

5 голосов
/ 10 сентября 2009

Если вы используете WebRequest вместо TcpClient, он должен использовать системный прокси по умолчанию и т. Д. Также будет меньше кода:)

Например:

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");
        }
    }
}
...