Главная » 2016 » Июль » 12 » Урок №8 - Ping в проекте WinForms
08:55
Урок №8 - Ping в проекте WinForms
Добрый день мои читатели! Сегодня мы поговорим о том, как через проект Windows Forms посылать пинги, такая функция периодически требуется для проверки наличия связи с сервером или каким-то адресом. Начнем мы как всегда с библиотек, которые потребуются нам в нашем проекте!
В самом начале мы прописываем следующие библиотеки :

  

using System.Net.NetworkInformation;
using System.Net;



После того, как мы прописали наши библиотеки, мы создадим макет формы, лично я добавил TextBox в который мы будем вводить адрес, кнопку запуска функции, и пару Label, один из которых будет показывать статус.



Далее мы пишем функцию пинга, но перед этим мы создадим переменную address, в которую мы будем записывать наш адрес :

 

 string address;
        public void pingme()
        {
            Ping png = new Ping();
            PingReply replict = png.Send(address);
            if (replict.Status == IPStatus.Success)
            {
                pingstat.Text = "PING OK";
            }
            else
            {
                pingstat.Text = "PING FALSE";
            }
        }



Итак, в самом начале нашей функции мы создаем элемент типа Ping с именем png, далее мы пишем код отправки и обработчика IP пингов, и демонстрируем результаты в нашем Label;
Теперь нам надо прописать код в кнопке, для этого мы кликаем два раза по кнопке и она создаст свою функцию, в которую мы записываем следующее:
  

private void Start_Click(object sender, EventArgs e)
        {
            if (pingbox.Text != "")
            {
                address = pingbox.Text;
                pingme();
            }
            else
            {
                pingstat.Text = "Error!";
                MessageBox.Show("Проверьте правильность ввода данных", "Ошибка!");
            }
        }



В функцию кнопки мы делаем "защиту от дурака", т.е. чтобы наша функция не сработала с пустым полем pingbox и пустой переменной address. Теперь проверим как это работает!




Вот такой вот простенький урок на сегодня! На этом мы ещё не заканчиваем! давайте теперь попробуем усложнить нашу программу, а именно, добавим Лог событий на время работы программы.
Итак, для формирования лога мы добавим на форму RichTextBox и теперь наша форма имеет следующий вид :



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

 Ping png = new Ping();
            PingReply replict = png.Send(address);
            if (replict.Status == IPStatus.Success)
            {
             pingstat.Text = "PING OK";
  logbox.AppendText("Start log...\r\n"+"Адрес: " + replict.Address.ToString()+"\r\nВремя: "+replict.RoundtripTime+"\r\nВремя жизни пакета:"+replict.Options.Ttl+"\r\nФрагментирование: "+replict.Options.DontFragment+"\r\nРазмер пакета: "+replict.Buffer.Length+"\r\nEnd Log...\r\n");

            }
            else
            {
                pingstat.Text = "PING FALSE";
            }



Теперь разберем нашу строчку, в функцию мы добавляем logbox.AppendText, AppendText не будет удалять предыдущий текст, а будет к существующему тексту добавлять строчки.
"Start log...\r\n" - Это просто вступительный текст перед началом логирования, чтобы можно было проще разделить строчки, к какому пингу они будут относиться.
"Адрес: "+replict.Address.ToString() - Этой строчкой мы выводим наш IP Адрес который мы пингуем в данный момент времени.
"\r\nВремя: "+replict.RoundtripTime - Эта переменная показывает нам, за какое время (в мс) прошел наш пакет до сервера.
"\r\nВремя жизни пакета:"+replict.Options.Ttl - Эта строчка показывает нам время жизни пакета данных в протоколе IP (предельно допустимое время его пребывания в системе), время актуальности записей DNS.
"\r\nФрагментирование: "+replict.Options.DontFragment - Эта строчка показывает нам фрагментируется ли наш IP пакет. Фрагментация IP-пакета увеличивает нагрузку на центральный процессор и снижает скорость передачи полезных данных этого пакета (на 2÷50 % в Ethernet сети в зависимости от длины кадра), поэтому её стараются избегать.
"\r\nРазмер пакета: "+replict.Buffer.Length - Эта строчка указывает нам длину пакета в байтах, по стандарту 32 байта
"\r\nEnd Log...\r\n" - Эта строчка просто показывает нам завершение лога для данного пинга.
Выглядит это следующим образом :

 
  
Наша программа посылает 1 пинг и показывает результаты, теперь посмотрим, как это реализовано в cmd.exe :



Как мы видим, данные отображаются фактически одни и те же, только в разной форме представлены :)
Стоит ли на этом останавливаться? Давайте ещё кое-что сделаем! например, сохранение лога в файл! (На всякий случай). В самом начале нашего проекта пропишем ещё одну библиотеку:
 
Using System.IO;


Теперь на нашу форму добавим ещё одну кнопку, и наша форма примет следующий вид:



После чего мы два раза нажимаем по нашей кнопке "Записать" и прописываем следующий код :
 
File.WriteAllText("log.txt", logbox.Text);
pingstat.Text = "Log file create";
Эта команда создаст файл log.txt в том месте, откуда запустила наша программа, также мы можем для удобства прикрутить сюда FolderBrowserDialog и тогда у пользователя будет выбор директории куда сохранять файл с логом. Теперь посмотрим как это выглядит:

Вот такой вот у нас с вами получился урок про одну из простых, но необходимых функций с пингом сервера и создание лог файла! Не забывайте заходить к нам в группу в Вконтакте, а также подписывайтесь на наш канал на YouTube
 
Категория: Уроки по C# | Просмотров: 1986 | Добавил: bowxdlal
Всего комментариев: 0
avatar