Ограничить время отклика для WebClient

Рейтинг: 1Ответов: 1Опубликовано: 15.12.2014

Приложение работает с сервером, созданом на телефоне, но при перезагрузке роутера выдает новый IP. Я решил эту проблему так:

Если не удалось подключиться к серверу, то идем методом перебора IP, к которым могу подключиться:

public static bool flag = false;
public static string ip = "http://192.168.1.1:8082";
public static void
get_ip(int p)
{

    if (p == 11) p = 0;
    string htmlCode;
    WebClient client = new WebClient();

        try
        {
 MessageBox.Show("http://192.168.1." + Convert.ToString(p) + ":8082");
 htmlCode = client.DownloadString("http://192.168.1." + Convert.ToString(p) + ":8082");
 ip = "http://192.168.1." + Convert.ToString(p) + ":8082";
        }
        catch (System.Net.WebException e) { p++; get_ip(p); }
        flag = false;
}

Как видим, если не удалось подключится к 192.168.1.1, то пробуем к 192.168.1.2 и т.д. до 10 (в сети не будет больше, чем 192.168.1.10), так вот, можно ли как-то ускорить этот процесс?

При выполнении:

htmlCode = client.DownloadString("http://192.168.1." + Convert.ToString(p) + ":8082");

Очень долго пытается соединиться (5-30 секунд) и так на каждой итерации. Можно ли как-то ограничить, если через 2 секунды нету ответа, то перезапустить функцию?

Ответы

▲ 2

Таймаут для запросов WebClient можно задать переопределив метод GetWebRequest

private class WebClientWithShortTimeout : WebClient
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        WebRequest request = base.GetWebRequest(uri);
        request.Timeout = 20 * 1000; // в миллисекундах
        return request;
    }
}