| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Ping |
| Автор: Bima 9.10.2006, 12:18 |
| Привет всем. Прошу откликнуться всех тех, кто писал пинг на ВСВ. Сторонние компоненты не предлагать, нужет чистый код на ВСВ. |
| Автор: Romikgy 9.10.2006, 12:37 |
что это обозначает? VCL or WinAPI (Sockets)???? |
| Автор: Bima 9.10.2006, 12:42 |
| можно и WinAPI я имел ввиду, что бы не предлагали код с использование сторонних компонентов. Конечно придется использовать WinAPI, но с привязкой к VCL |
| Автор: Romikgy 9.10.2006, 12:47 |
к каким VCL встроеным в билдер? |
| Автор: Bima 9.10.2006, 12:51 |
| ко всем в стандартной комлектации... |
| Автор: Romikgy 9.10.2006, 12:52 |
| http://www.sources.ru/cpp/cpp_cping.shtml http://forum.sources.ru/index.php?showtopic=157027&st=0&#entry1295991 чистый апи имхо , но дельфи http://www.ishodniki.ru/art/artshow.php?cat=1&id=76&show=delphi http://forum.vingrad.ru/index.php?showtopic=89605&hl= http://forum.vingrad.ru/index.php?showtopic=26584&hl= http://forum.vingrad.ru/index.php?showtopic=3486&hl= не брезгуем поиском! |
| Автор: Bima 9.10.2006, 13:24 | ||||||
| Вот что получилось: на форму кинул label и Edit код основной программы:
код класса CPing
код заголовочного файла для класса CPing:
Теперь сам вопрос: Каким образом вызывать функцию в своей программе, что бы можно было передавать колличество передаваемых байт и время на таймут? Еще бы хотелось, что бы функция в качестве параметра возвращала сколько мс она тратит на пинг |
| Автор: Romikgy 9.10.2006, 13:45 | ||
добавь в класс еще один метод
|
| Автор: Bima 9.10.2006, 14:03 |
| я понял, что нужно добавлять метод в класс. Но я бы хотел просто изменить заголовочную функцию int CPing::Ping(char* strHost) на конструкцию типа вот этой: int CPing::Ping(char* strHost, DWORD mByte, DWORD TimeOut, DWORD *mSek) где mByte колличество передаваемых и получаемых байт, TimeOut - время таймаута, mSek - время затраченное на пинг все бы ничего, но я не знаю, куда вставлять TimeOut, mSek и mByte |
| Автор: Romikgy 9.10.2006, 14:36 | ||
Добавлено @ 14:38 http://www.citforum.ru/nets/articles/ping/ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/icmpsendecho.asp |
| Автор: Bima 10.10.2006, 06:17 | ||
| ничего не выходит. сначала ничего скомпилировать не мог. Потом заменил строку *mSek=RTTime; на *mSek=icmpEcho.RTTime; скомпилировалось хорошо. Вызываю вот так
но при вызове этой функции происходит исключение в моей программе и тормозится |
| Автор: Romikgy 10.10.2006, 09:19 | ||||
использование
|
| Автор: Bima 10.10.2006, 09:52 | ||
| все отлично, код заработал, но практически всегда выдает, что функция закончилась неудачно (False) Хотя время таймаута до 10 секунд ставлю, а возвращается от 20 до 70 мс
Почему функция возвращает False??? |
| Автор: Romikgy 10.10.2006, 10:13 | ||
возвращает ответ где статус ответа
IP_SUCCESS 0 это при успешном завершении ф_ции, если верить мсдн это из файла ipexport.h |
| Автор: Bima 10.10.2006, 10:32 |
| проверил переменную возвращает 11007 (IP_BAD_OPTION) и что это значит??? |
| Автор: Romikgy 10.10.2006, 11:36 | ||
замени на это , думаю найдешь где
|
| Автор: Bima 10.10.2006, 13:41 | ||||||
| Все заработало. Вот универсальный код программы, который можно использовать: Создаем новый проект кидаем на форму Edit и Button добавляем к проекту два файла: cping.cpp
cping.h
Теперь делаем обработчик на кнопке куда записываем код Здесь код основной программы:
|
| Автор: Romikgy 10.10.2006, 14:20 | ||
| Bima, оно работает но не правильно , после н-ного промежутка времени и работы со снифером добился работы нормальной
|
| Автор: Bima 10.10.2006, 14:57 | ||||||
| Romikgy, спасибо. вот исправленная рабочая версия: Создаем новый проект кидаем на форму Edit и Button добавляем к проекту два файла: cping.cpp
cping.h
Теперь делаем обработчик на кнопке куда записываем код Здесь код основной программы:
|
| Автор: bigscorp 12.12.2006, 06:33 |
| а почему не возвращает код ошибки если пробуешь пнуть адрес которого в сетке нету |
| Автор: Bima 12.12.2006, 09:49 | ||
| Смотри внимательно код. в самом конце обрабатывается условие на таймаут, если туда еще поставишь что нибудь из этой таблицы:
то будет выдавать и ошибку и все, что ты захочешь. |
| Автор: bigscorp 13.12.2006, 03:00 |
| факт!! респект Bima ... а не подскажешь, можно ли на основе этой функции создать что-то типа tracert? в принципе я понял как это сделать ... ттл увеличивать на 1 и будет путь прохождения пакета пока не уткнется в указанный адрес, но не могу ИП получить из icmpEcho |
| Автор: Bima 13.12.2006, 06:37 |
| Сложно сказать, ничего в голову с ходу не лезет. Сделай новую ветку в форуме, думаю, тебе здесь помогут. |
| Автор: SergXP 5.5.2008, 15:19 | ||
| Извеняюсь, что поднимаю старую тему, но у меня такая проблема Добавил StringGrid, две колонки IP Adress и Ping Начинаю считывать каждую ячейку с IP Адрессом и получаю пинг, но он отображается не правильно например XXX.XXX.XXX.XXX 30ms YYY.YYY.YYY.YYY 30 ms ZZZ.ZZZ.ZZZ.ZZZ 180ms DDD.DDD.DDD.DDD 180 ms Не понятно, почему происходит запись пинга два раза на разные айпи адреса Плюс к тому же, я записываю каждый шаг в Memo, и в нем выводятся строки 1 2 3 4 5 6 Выводятся они не быстро, сразу тока нажал, 1, 2 потом думает, 3,4 опять думает и так далее Вот такой у меня кодик..
Но почему то не работает! |
| Автор: SergXP 7.5.2008, 20:00 |
| |
| Автор: Bima 8.5.2008, 13:19 |
| Похоже функция вызывается, но параметры остались с прошлого раза. попробуй в цикле вставь задержку с временем таймаута пинга, если это не поможет будем дальше разбираться |