Russian Qt Forum
Ноябрь 23, 2024, 01:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отловить сообщения от ping  (Прочитано 12477 раз)
qtист
Гость
« : Апрель 02, 2009, 11:13 »

Наверное в этот раздел постю

есть код:

Код
C++ (Qt)
QHostAddress aa;
QHostInfo info;
 
info =info.fromName("pupkin");
if (!info.addresses().isEmpty())
{
    aa = info.addresses().first();
}
str=QString("ping %1").arg(aa.toString());
QProcess pong;
pong.execute(str);

как бы мне отловить сообщения от ping'а?
а может и по другоиу надо..... Шокированный
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Апрель 02, 2009, 11:28 »

про задачку поподробнее - изначально что нада, проверять жив сервак или нет?
Записан
qtист
Гость
« Ответ #2 : Апрель 02, 2009, 11:45 »

про задачку поподробнее - изначально что нада, проверять жив сервак или нет?

Примерно,в сети находиться некоторый прибор(промписи),надо узнать включен он или нет.
Записан
spirit
Гость
« Ответ #3 : Апрель 02, 2009, 11:53 »

попробуй так
Код
C++ (Qt)
QProcess ping;
ping.start("ping", QStringList() << "prog.org.ru");
if (ping.waitForFinished())
qDebug() << ping.readAll();
 
Записан
qtист
Гость
« Ответ #4 : Апрель 02, 2009, 13:16 »

spirit +1

и вдогонку два сопутствующих вопроса:

1.хорошо бы сообщения на русский перевести(кракозябры плохо читаются  Веселый)
2.а можно не целиком прочитать сообщения,а построчно читать?

Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Апрель 02, 2009, 13:31 »

и вдогонку два сопутствующих вопроса:

1.хорошо бы сообщения на русский перевести(кракозябры плохо читаются  Веселый)
2.а можно не целиком прочитать сообщения,а построчно читать?

1. QTextCodec::setCodecForCStrings
2. readLine()
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
qtист
Гость
« Ответ #6 : Апрель 02, 2009, 13:41 »

QTextCodec::setCodecForCStrings - ессно стоит,но ping.readAll() возвращает крякозябры
как я понимаю пока процесс не закончился (waitForFinished),
ни чё возвращаться не будет - пофигу,что readAll(),что readLine() ?
Записан
spirit
Гость
« Ответ #7 : Апрель 02, 2009, 13:44 »

если под виндой, то пробуй так
Код
C++ (Qt)
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp-866"));
QProcess ping;
ping.start("ping", QStringList() << "prog.org.ru");
if (ping.waitForFinished()) {
int count = 0;
while (!ping.atEnd())
qDebug() << ++count << " " << ping.readLine();
}
 
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Апрель 02, 2009, 13:57 »

как я понимаю пока процесс не закончился (waitForFinished),
ни чё возвращаться не будет - пофигу,что readAll(),что readLine() ?

Неправильно понимаешь. См.

Цитировать
void QProcess::readyReadStandardOutput ()   [signal]
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spirit
Гость
« Ответ #9 : Апрель 02, 2009, 13:59 »

ага, лучше читать после этого сигнала, ибо тогда не будет гуй виснуть.
Записан
qtист
Гость
« Ответ #10 : Апрель 02, 2009, 14:09 »

spirit построчно получилось ( с меня ещё один стакан spirta)
А вот с кодировкой... и под винду и под linux должно работать
pastor уговорил
Записан
Mixolap
Гость
« Ответ #11 : Апрель 02, 2009, 17:03 »

Вот еще ссылка по теме: http://qt.shamangrad.net/doku.php?id=%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8_%D0%BD%D0%B0%D0%BB%D0%B8%D1%87%D0%B8%D1%8F_%D0%BF%D0%B8%D0%BD%D0%B3%D0%B0_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2
Записан
crackedmind
Гость
« Ответ #12 : Апрель 02, 2009, 19:10 »

Если пишется под винду, можно воспользоваться этими API функциями
Цитировать
IcmpCloseHandle
IcmpCreateFile
IcmpParseReplies
IcmpSendEcho
IcmpSendEcho2
Из библиотеки Ip helper. И ничего парсить не придется.
Записан
qtист
Гость
« Ответ #13 : Апрель 06, 2009, 11:03 »

Сделал красиво  Смеющийся,работает везде

Код
C++ (Qt)
QProcess *ping;
ping = new QProcess ();
connect( ping, SIGNAL(readyReadStandardOutput ()), this, SLOT(print_ping()) );
ping->start("ping", QStringList() << "pupkin"  );
......
 
void Proga::print_ping()
{
   QByteArray      output;
 
   output = ping->readAllStandardOutput ();
   ui.textEdit->append(output.data()); //вывод в гуи
 
}

во как Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 22.