Решаем проблему падения скорости до нуля у USB Модемов.Внимание! Программа обновлена, читайте #10 пост! Приветствую Думаю, у того, кто использует USB модемы (МТС-Коннект в частности) не раз бывала такая проблема, когда скорость интернета падает до нуля, и приходится делать переподключение модема. В ручную несколько раз в день, или особенно ночью, согласитесь, это делать не очень удобно. Сегодня я расскажу вам, как автоматизировать данный процесс, и сохранить нервные клетки. Итак, начнём. Писать программу мы будем на C#, проверялось на USB-Модеме от МТС. Для начала построим схему программы: Таймаут->Проверка подключения->Если успешно, то запускаем таймаут заново. Иначе - переподключение интернета. Отлично, теперь обсудим интерфейс программы: 1.) Кнопки Вкл/Выкл автоматического управления 2.) Ручной ввод интервала таймера 3.) Статус интернета 4.) Время до следующей проверки 5.) Сворачивание в трей 6.) Дебаг Выглядеть графически это будет так: Самые сложные механизмы в данной программе - это проверка подключения, и переподключение в случае падения интернета. И то, и другое мы будем реализовывать с помощью командной строки Windows. С теорией покончено, приступим к практике! Запустите Microsoft Visual C# (Я использовал 2008 Express). Файл->Создать проект->Приложение Windows Forms Далее набросайте формочку как у меня на рисунке, не забудьте про сворачивание в трей (Или можете загрузить готовый проект в конце статьи). Затем откройте Form1.cs (Или любое другое имя вашей формы). Вписываем следующее: Code: 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 ----------------------------------- Дополнительные материалы: Сорцы Готовая программа
Ух, спасибо огромное, парень) Я решал проблему запуском в аимпе онлайн радио, или же чисто в браузере D: Сейчас поставил программу, надеюсь все будет отлично)
Виснет модем? Купить нормальный а не то УГ что предлагают. Да дороже в два раза но работает на ура Падает коннект из-за плохих условий приёма? Берём предыдущее и нормальную gsm антенну. Да кстати. За использование только системных функций плюс но из-за этого у тебя программка не кросплатформенна даже в рамках одной платформы. Так что лучше уж +100кб и заюзать curl или что либо другое. Вариант два, взять ping из английской версии винды и положить рядом с программой. Вариант три. Юзать AT и не парить мозг )
не стоит предлагать это все людям, не зная проблемы. И да, модем не виснет. Условия 97%-99% онли. P.S. проверил софт, работает. как я понял он лишь не дает "пропасть трафику" т.е. не упасть, например, до нуля, он пингует ya.ru каждые Х секунд, которые Вы выставите. раньше проблема заключалась в том, что если не используете интернет, т.е. чисто простой. Хотя мессенджеры онлайн, то трафик падал и нельзя было ничего сделать. Помогало лишь переподключение.
Итак, сегодня состоится релиз AIR 1.4 Новшества: [ + ] Универсальная, под любой мопед почти [ + ] Не использует более системных команд - решил использовать более интересный способ. Теперь можно запускать, и будет работать даже тогда, когда у вас кончился трафик, но инет работает еле-еле... [ + ] Не подвисает во время проверки, т.к теперь добавил многопоток. [ + ] Новый уровень, короче Ожидаем!
Итак, прошу прощения за опоздание релиза, небыло времени.. Во-первых хочу сказать, что прога теперь называется InternetManager Основные возможности: Выбор таймаута Выбор процесса программы от модема Выбор подключения Выбор места программы от модема вручную В трей Активировать, Деактивировать Сколько осталось до проверки Прогресс бар и т.д и т.п Также теперь программа многопоточная, т.е не будет подвисать при проверки, и вообще быстрее работает и проверяет... Ссылка на скачку: http://www.sendspace.com/file/ejltt9 Размер архива: 18.79KB Размер программы: 41,5КВ P.S Исходники легко добудете сами, обо всех багах пишем тут, если таковые есть.