Russian Qt Forum

Qt => Работа с сетью => Тема начата: Mirael Karamir от Июня 27, 2007, 13:54



Название: Как пропинговать сервер
Отправлено: Mirael Karamir от Июня 27, 2007, 13:54
Привет всем! Кто нибудь может привети пример кода, как можно из Qt пропинговать другой компьютер в сети?


Название: Как пропинговать сервер
Отправлено: AcerExtensa от Июня 27, 2007, 13:59
Код:

QString program;
QStringList arguments;
program="ping";
arguments <<"127.0.0.1";
QProcess myProcess;
myProcess.start(program, arguments);
myProcess.waitForFinished();
myProcess.deleteLater();


Название: Как пропинговать сервер
Отправлено: Mirael Karamir от Июня 27, 2007, 14:04
спасибо, а как узнать результат??? (доступен сервер или нет?)


Название: Как пропинговать сервер
Отправлено: AcerExtensa от Июня 27, 2007, 14:09
Код:
te->append( QString::fromLocal8Bit(myProcess.readAllStandardOutput())); 
te->append( QString::fromLocal8Bit(myProcess.readAllStandardError()));

te - Поле QTextEdit например.

добавлено спустя 2 минуты:

 Ну а если результат не надо выводить а только вывести доступен или нет то можно забацать через Регулярные Выражения RegExp форма ответа пинга ведь известна.


Название: Как пропинговать сервер
Отправлено: Mirael Karamir от Июня 27, 2007, 14:16
О... а можно второй вариант поподробнее??? Просто никогда не работал ни с QProcess ни с RegExp...


Название: Как пропинговать сервер
Отправлено: AcerExtensa от Июня 27, 2007, 14:19
Уменя у самого RegExp храмает........ но попробуй........ пинг под Виндой или под Иксами?


Название: Как пропинговать сервер
Отправлено: Mirael Karamir от Июня 27, 2007, 14:24
Как минимум и под то, и под другое. Может как товсе можно сделать через сокеты?


Название: Как пропинговать сервер
Отправлено: AcerExtensa от Июня 27, 2007, 14:41
Можно и наверное гораздо лутше.......

добавлено спустя 12 минут:

 Думаю надо смотреть в эту сторону:

Цитировать

bool QTcpServer::waitForNewConnection ( int msec = 0, bool * timedOut = 0 )
Waits for at most msec milliseconds or until an incoming connection is available. Returns true if a connection is available; otherwise returns false. If the operation timed out and timedOut is not 0, *timedOut will be set to true.
This is a blocking function call. Its use is disadvised in a single-threaded GUI application, since the whole application will stop responding until the function returns. waitForNewConnection() is mostly useful when there is no event loop available.
The non-blocking alternative is to connect to the newConnection() signal.
See also hasPendingConnections() and nextPendingConnection().


глянь Тролевские доки.


Название: Как пропинговать сервер
Отправлено: Mirael Karamir от Июня 27, 2007, 14:45
Моя задача не сервер написать, а переодически проверять есть ли связь с сервером моей компании, и стягивать с него кой-какие данные.


Название: Как пропинговать сервер
Отправлено: AcerExtensa от Июня 27, 2007, 14:57
ну так с этим и сможеш проверить: "Returns true if a connection is available; otherwise returns false" задаеш таймаут в пару секунд, если конект прошел делаеш что тебе надо, если нет то пинг не прошел............

глянь в доки, может там что попроще есть....... мне просто это на глаза попалось.........


Название: Как пропинговать сервер
Отправлено: J. Bond от Июня 28, 2007, 08:29
QAbstractSocket::connectToHost()
а потом QAbstractSocket::waitForConnected();


Название: Re: Как пропинговать сервер
Отправлено: AAXEE от Марта 24, 2009, 20:55
1.5 года прошло. Ничего нового в Qt, касаемо пинга не появилось?


Название: Re: Как пропинговать сервер
Отправлено: lit-uriy от Марта 24, 2009, 21:31
вроде нет


Название: Re: Как пропинговать сервер
Отправлено: Ruzzz от Ноября 02, 2009, 23:52
Для пинга нужен ICMP, а он вроде в nix'ах только из под рута?