 |

30.07.2012, 20:56
|
|
Познающий
Регистрация: 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
-----------------------------------
Дополнительные материалы:
Сорцы
Готовая программа
|
|
|

31.07.2012, 02:19
|
|
Познающий
Регистрация: 28.07.2012
Сообщений: 39
С нами:
7258646
Репутация:
1
|
|
Ну и где поливание говном обещанное?!
|
|
|

16.08.2012, 22:06
|
|
Новичок
Регистрация: 23.07.2012
Сообщений: 2
С нами:
7265846
Репутация:
-5
|
|
Ух, спасибо огромное, парень)
Я решал проблему запуском в аимпе онлайн радио, или же чисто в браузере D:
Сейчас поставил программу, надеюсь все будет отлично)
|
|
|

16.08.2012, 22:38
|
|
Новичок
Регистрация: 28.12.2011
Сообщений: 12
С нами:
7565366
Репутация:
0
|
|
если виндоус будет на англ. языке, не заработает твоя программа, парень
|
|
|

17.08.2012, 15:58
|
|
Новичок
Регистрация: 21.07.2012
Сообщений: 0
С нами:
7268726
Репутация:
0
|
|
Получается и возобновляется скорость?
Кто-нибудь пробовал?
|
|
|

17.08.2012, 16:29
|
|
Познавший АНТИЧАТ
Регистрация: 01.12.2006
Сообщений: 1,769
С нами:
10233548
Репутация:
1118
|
|
Виснет модем? Купить нормальный а не то УГ что предлагают. Да дороже в два раза но работает на ура
Падает коннект из-за плохих условий приёма? Берём предыдущее и нормальную gsm антенну.
Да кстати. За использование только системных функций плюс но из-за этого у тебя программка не кросплатформенна даже в рамках одной платформы. Так что лучше уж +100кб и заюзать curl или что либо другое.
Вариант два, взять ping из английской версии винды и положить рядом с программой.
Вариант три. Юзать AT и не парить мозг )
|
|
|

17.08.2012, 16:33
|
|
Новичок
Регистрация: 23.07.2012
Сообщений: 2
С нами:
7265846
Репутация:
-5
|
|
Сообщение от POS_troi
Виснет модем? Купить нормальный а не то УГ что предлагают. Да дороже в два раза но работает на ура
Падает коннект из-за плохих условий приёма? Берём предыдущее и нормальную gsm антенну.
не стоит предлагать это все людям, не зная проблемы.
И да, модем не виснет.
Условия 97%-99% онли.
P.S. проверил софт, работает.
как я понял он лишь не дает "пропасть трафику" т.е. не упасть, например, до нуля, он пингует ya.ru каждые Х секунд, которые Вы выставите.
раньше проблема заключалась в том, что если не используете интернет, т.е. чисто простой. Хотя мессенджеры онлайн, то трафик падал и нельзя было ничего сделать. Помогало лишь переподключение.
|
|
|

17.08.2012, 17:22
|
|
Познающий
Регистрация: 28.07.2012
Сообщений: 39
С нами:
7258646
Репутация:
1
|
|
Скоро перепишу прогу чтоб работала под инглишом и т.п, появилась идейка)
|
|
|

22.08.2012, 12:32
|
|
Познающий
Регистрация: 28.07.2012
Сообщений: 39
С нами:
7258646
Репутация:
1
|
|
Итак, сегодня состоится релиз AIR 1.4
Новшества:
[ + ] Универсальная, под любой мопед почти
[ + ] Не использует более системных команд - решил использовать более интересный способ. Теперь можно запускать, и будет работать даже тогда, когда у вас кончился трафик, но инет работает еле-еле...
[ + ] Не подвисает во время проверки, т.к теперь добавил многопоток.
[ + ] Новый уровень, короче
Ожидаем!
|
|
|

30.08.2012, 15:35
|
|
Познающий
Регистрация: 28.07.2012
Сообщений: 39
С нами:
7258646
Репутация:
1
|
|
Итак, прошу прощения за опоздание релиза, небыло времени..
Во-первых хочу сказать, что прога теперь называется InternetManager
Основные возможности:
Выбор таймаута
Выбор процесса программы от модема
Выбор подключения
Выбор места программы от модема вручную
В трей
Активировать, Деактивировать
Сколько осталось до проверки
Прогресс бар и т.д и т.п
Также теперь программа многопоточная, т.е не будет подвисать при проверки, и вообще быстрее работает и проверяет...
Ссылка на скачку: http://www.sendspace.com/file/ejltt9
Размер архива: 18.79KB
Размер программы: 41,5КВ
P.S Исходники легко добудете сами, обо всех багах пишем тут, если таковые есть.
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|