Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
10 / 10 / 1
Регистрация: 02.04.2011
Сообщений: 95
1

Ограничение на пинг

05.04.2011, 23:27. Просмотров 5563. Ответов 9
Метки нет (Все метки)


Здравствуйте, софтина пингует несколько адресов по таймеру, но при таймауте на одном зависает , подскажите как добавить в нее ограничение в 250мсек если нет ответа от сервера, либо просто убрать зависание ?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void timer1_Tick(object sender, EventArgs e)
 
        {
            Ping ping = new Ping();
            PingReply pingReply = ping.Send(textBox1.Text);
                labelTime1.Text = pingReply.RoundtripTime.ToString() + " мс";
                labelIp1.Text = pingReply.Address.ToString();
                labelSucc1.Text = pingReply.Status.ToString();
        }
 
        private void timer2_Tick(object sender, EventArgs e)
        {
            Ping ping = new Ping();
            PingReply pingReply = ping.Send(textBox2.Text);
            labelTime2.Text = pingReply.RoundtripTime.ToString() + " мс";
            labelIp2.Text = pingReply.Address.ToString();
            labelSucc2.Text = pingReply.Status.ToString();
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2011, 23:27
Ответы с готовыми решениями:

С ПК1 к ПК2 идет пинг. А с ПК2 к ПК1 не идет пинг. Как сделать что бы с ПК2 шел пинг к ПК1 ?
В работе есть два сети, один старый, другой новый, так говорили. С новой сети можно пинговать...

Как создать ограничение? Надо создать ограничение ввода букв, а то программа виснет!
var a:integer; begin repeat; writeln ('Введите число не равное еденице'); ...

Ip пинг
Здравствуйте кто подскажет как можно делать проверку IP адреса. Например есть адрес и нужно...

Пинг
Честно, ассемблером только начал заниматься. Кто может, киньте код программы, которая будет...

9
41 / 41 / 9
Регистрация: 28.01.2011
Сообщений: 175
05.04.2011, 23:38 2
Может, лучше использовать потоки?
0
10 / 10 / 1
Регистрация: 02.04.2011
Сообщений: 95
05.04.2011, 23:49  [ТС] 3
А какая разница в данном варианте, мне то зависание надо убрать.
0
Почетный модератор
Эксперт .NET
8691 / 3643 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.04.2011, 01:15 4
У Ping.Send есть перегруженные конструкторы.
C#
1
2
3
// Если ожидание > 250 мс, то будет возвращено управление потоку
// и статус будет TimedOut
ping.Send(..., 250);
1
10 / 10 / 1
Регистрация: 02.04.2011
Сообщений: 95
06.04.2011, 01:39  [ТС] 5
Они не работают, опции выставляются но ошибка всегда есть "Исключение во время запроса Ping".


Это полный обзор ошибки

Вот листинг куска

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        {
            int timeout = 250;
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes(data);
 
            Ping ping = new Ping();
            PingOptions options = new PingOptions();
            options.DontFragment = true;
            PingReply pingReply = ping.Send("www.yandex.ru2", timeout, buffer, options);
            if (pingReply.Status == IPStatus.Success)
            {
                labelTime1.Text = pingReply.RoundtripTime.ToString() + " мс";
                labelIp1.Text = pingReply.Address.ToString();
                labelSucc1.Text = pingReply.Status.ToString();
            }
        }
Адрес именно www.yandex.ru2, так как если пинг есть никаких проблем не возникает, а вот на таймауте или если сервер не доступен - вылетает .
0
Почетный модератор
Эксперт .NET
8691 / 3643 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.04.2011, 02:10 6
Ошибка в том что DNS не может определить хост. Оберните всё в try { } catch { }, но будут тормоза по любому, т.к. задержка идёт ещё на стадии определения хоста (т.е. timeout не работает).
И зачем использовать перегрузку из 4 параметров, если последних 2 всё-равно грубо говоря не используются.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            PingReply pingReply = null;
            try {
                pingReply = new Ping().Send("www.yandex.ru2", 1000);
            } catch {
                // Если ошибка
                pingReply = null;
            } finally {
                // А тут можно вывод делать
                if (pingReply != null && pingReply.Status == IPStatus.Success)
                {
                    labelTime1.Text = pingReply.RoundtripTime.ToString() + " мс";
                    labelIp1.Text = pingReply.Address.ToString();
                    labelSucc1.Text = pingReply.Status.ToString();
                }
            }
1
10 / 10 / 1
Регистрация: 02.04.2011
Сообщений: 95
06.04.2011, 03:13  [ТС] 7
Шикарно! Тоже пытался в try поставить но чуть по другому .
В целом вы правы вместо success все равно ничего не вылезет, с другой стороны от софтины тогда смысла нет - messegebox прицепить некуда .Планировалось при !Success выкидывать сообщение со звуком и идти поднимать машину .
0
CEO
Эксперт С++
2256 / 1246 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
06.04.2011, 11:45 8
Kayak, нутак прилепите в catch или в finally ваше сообщение
1
2 / 2 / 0
Регистрация: 13.03.2011
Сообщений: 50
13.04.2011, 06:57 9
Планировалось при !Success выкидывать сообщение со звуком и идти поднимать машину.

Задача аналогичная, мониторить свичи, при падении одного из-них выдавать звуковое сообщенние. Пожалуйста прошу поделитесь инфой, как работает ping и все-такое.

С уважением Азамат.
0
10 / 10 / 1
Регистрация: 02.04.2011
Сообщений: 95
13.04.2011, 10:06  [ТС] 10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            PingReply pingReply = null;
            try {
                pingReply = new Ping().Send("www.yandex.ru2", 1000);//новый экземпляр пинга (адрес,тайм аут(советую ставить переменную , не известно почему но работает стабильнее))
            } catch {/*сюда ставим сообщение*/
                // Если ошибка
                pingReply = null;
            } finally {
                // А тут можно вывод делать
                if (pingReply != null && pingReply.Status == IPStatus.Success) //при желании можно поменять и выводить сообщение от сюда
                {
                    labelTime1.Text = pingReply.RoundtripTime.ToString() + " мс";//тут выводим на лейбл время ответа +мс
                    labelIp1.Text = pingReply.Address.ToString();//сам ип который пингуем
                    labelSucc1.Text = pingReply.Status.ToString();//ну и статус при удаче Success при неудаче чаще всего тайм аут
                }
            }
Вот минимальный набор для пинга

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
class Program
{
    static void Main(string[] args)
    {
        System.Net.NetworkInformation.Ping ping =
            new System.Net.NetworkInformation.Ping();
        System.Net.NetworkInformation.PingReply pingReply = ping.Send("www.cyberforum.ru");
        Console.WriteLine(pingReply.RoundtripTime); //время ответа
        Console.WriteLine(pingReply.Status);        //статус
        Console.WriteLine(pingReply.Address);       //IP
        Console.ReadKey(true);
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2011, 10:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Высокий пинг
Здравствуйте, проблема с локальной сетью, в сети всего два компьютера, которые стоят рядом,...

Скачет пинг
Ребят, купил недавно роутер, D-Link DSL-2640u/c4 называется. Поставил на стационарный комп свой....

Скачет пинг
У меня роутер zyxel Keenetic giga 2. Интернет чертовски нестабилен. Ввел ping через командную...

Пинг-понг
? есть ниже в коде комментарием unit tennis; interface uses


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.