HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ИНФО > Статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 30.07.2012, 20:56
Sharp.Net
Познающий
Регистрация: 28.07.2012
Сообщений: 39
С нами: 7258646

Репутация: 1
По умолчанию

Решаем проблему падения скорости до нуля у USB Модемов.
Внимание! Программа обновлена, читайте #10 пост!
Приветствую

Думаю, у того, кто использует USB модемы (МТС-Коннект в частности) не раз бывала такая проблема, когда скорость интернета падает до нуля, и приходится делать переподключение модема. В ручную несколько раз в день, или особенно ночью, согласитесь, это делать не очень удобно. Сегодня я расскажу вам, как автоматизировать данный процесс, и сохранить нервные клетки.

Итак, начнём.

Писать программу мы будем на C#, проверялось на USB-Модеме от МТС.

Для начала построим схему программы:

Таймаут->Проверка подключения->Если успешно, то запускаем таймаут заново. Иначе - переподключение интернета.

Отлично, теперь обсудим интерфейс программы:

1.) Кнопки Вкл/Выкл автоматического управления

2.) Ручной ввод интервала таймера

3.) Статус интернета

4.) Время до следующей проверки

5.) Сворачивание в трей

6.) Дебаг

Выглядеть графически это будет так:



Самые сложные механизмы в данной программе - это проверка подключения, и переподключение в случае падения интернета.

И то, и другое мы будем реализовывать с помощью командной строки Windows.

С теорией покончено, приступим к практике!

Запустите Microsoft Visual C# (Я использовал 2008 Express).

Файл->Создать проект->Приложение Windows Forms

Далее набросайте формочку как у меня на рисунке, не забудьте про сворачивание в трей (Или можете загрузить готовый проект в конце статьи).

Затем откройте Form1.cs (Или любое другое имя вашей формы). Вписываем следующее:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

//^ Подключение нужный библиотек ^
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //Функция для выполнения системных команд, можно написать и свою, т.к вариант не особо удачен.
        public string exec(string comand)
        {
            string Patch = Directory.GetCurrentDirectory() + @"\trace.bat";
            System.IO.TextWriter BatFile = File.CreateText(Patch);

            BatFile.WriteLine("@echo off");
            BatFile.WriteLine(comand);

            BatFile.Close();

            Process compiler = new Process();
            compiler.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
            compiler.StartInfo.FileName = Patch;
            compiler.StartInfo.CreateNoWindow = true;
            compiler.StartInfo.UseShellExecute = false;
            compiler.StartInfo.RedirectStandardInput = true;
            compiler.StartInfo.RedirectStandardOutput = true;
            compiler.Start();
            string text_cmd = compiler.StandardOutput.ReadToEnd();
            compiler.Close();
            return text_cmd;
        }
//Таймаут
        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Enabled = false; //Выключаем таймер
            ost.Text = time.Text; //Сбрасываем поле "Осталось"
            string a = exec("ping ya.ru -w 150"); //Выполняем системную команду PING для проверки поключения.
            debug.Text = a; //Записываем результат в дебаг
//Манипуляции для проверки подключения...
            if (a.IndexOf("потеряно = 4") > -1 || a.IndexOf("потеряно = 3") > -1 || a.IndexOf("При проверке связи не удалось обнаружить узел ya.ru.") > -1)
            {
//Если интернет упал...
                status.Text = "Off, Перезапуск..."; //Меняем статут
                string b = exec("taskkill /IM \"Connect Manager.exe\" /F"); //Системная команда чтобы завершить Коннект менеджер. Тут вы можете записать "БИД" Мегафон и т.п...
                b = exec("rasdial MTS-Internet /DISCONNECT"); //Выключаем интернет, для других операторов читайте выше
                b = exec("ping -n 10 127.0.0.1 > NUL"); //Даём время на выключение путём пустого пинга...
                b = exec("start C:\\cm.lnk"); //Самое интересное - в данную папку нужно поместить ярлык на запуск проги интернета.
                status.Text = "Перезапуск завершён! (On)"; //Изменение статуса
            }
            else
//Если работает
            {
                status.Text = "On :D"; //Изменение статуса
            }
            timer1.Enabled = true; //Врубаем таймер
        }

        private void button1_Click(object sender, EventArgs e)
        {
//Кликнули по клавише "Начать"
            timer1.Interval = Convert.ToInt32(time.Text)*1000; //Устанавливаем таймаут для таймера
            timer1.Enabled = true;// Включаем таймер 1
            timer2.Enabled= true;// Включаем таймер 2
            button1.Enabled = false;//Делаем неактивной кнопку "Старт"
            button2.Enabled = true;//Делаем активной кнопку "Стоп"

        }

        private void button2_Click(object sender, EventArgs e)
        {
//Кликнули по клавише "Стоп"
            timer1.Enabled = false;// Выключаем таймер 1
            timer2.Enabled = false;// Выключаем таймер 2
            button1.Enabled = true;//Делаем активной кнопку "Старт"
            button2.Enabled = false;//Делаем неактивной кнопку "Стоп"
            ost.Text = time.Text;//Новое значение для поля "Осталось"
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
//Таймер для отнятия по 1 значения из поля "Осталось", если оно равно нулю, то ставим дефолтное значение.
            if (ost.Text == "0")
            {
                ost.Text = time.Text;
            }
            else
            {
                ost.Text = Convert.ToString(Convert.ToInt32(ost.Text) - 1);
            }
        }

        private void notifyIcon1_Click(object sender, EventArgs e)
        {
            this.Show(); // делаю форму видимой
            notifyIcon1.Visible = false; // иконка трея невидима
        }

        private void button3_Click(object sender, EventArgs e)
        {
            notifyIcon1.Visible = true; // делаем видимым иконку трея
            this.Hide(); // делаем невидимым форму
        }

        private void interval_KeyUp(object sender, KeyEventArgs e)
        {
//Нажатие клавиши в установке размер таймаута
            time.Text = interval.Text;
            ost.Text = interval.Text;
        }

    }
}
Также хочу отметить, что программа не будет работать тогда, когда закончился трафик, она рассчитана на 3G... Если вам нужен другой результат, поиграйтесь с PING.

А также таймаут таймера ставьте не менее 10 секунд, т.к просто не успеют операции все провернутся... можете даже дописать проверку, но это уже мелочи, if решает =)

И главное - сделайте в настройках программы вашего мопеда, чтобы было автоматическое подключение к интернету

Удачи! С вами был Sharp.Net

-----------------------------------

Дополнительные материалы:

Сорцы

Готовая программа
 
Ответить с цитированием
 



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.