Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Програмный PING [D7, WinXP]


Страницы:   1 2

SiONYX ©   (2003-09-04 23:57:00) 

Идея следующая: прежде чем пытаться соединиться с удаленной машиной - пропинговать ее. Если отзовется => включена и можно соединиться. (А то если машина выключена - попытка коннекта "затягивается").

Есть хорошая утилитка PING, но как бы зделать что-то подобное програмно.

Может кто посоветует что-то другое реализующее эту идею.

Заранее спасибо.


panov   (2003-09-13 14:06:00) [1]

>Oleg The First (13.09.03 04:52) [24]

Свой вопрос - в другой топик.


Oleg The First   (2003-09-13 04:52:00) [2]

Вот функция которую вызывает у немя пингующий поток.
В Windows не так уж и много потоков можно запустить.
У меня работает 200 потоков паралельно. (можно увеличить до 500)
Значит проблемма состоит с тормозами.
допустим мне нада просканить не 256 адрессов а 40*256 (вот такие у нас сетки)
И что? а то что 256 адрессов сканируется примерно 5 сек
5*40 - долго ждать. ЧТО ДЕЛАТЬ? подскажите!!!!

может не пингами сканить? или как? оч нуна надёжный и быстрый алгоритм.


function IPisLive(HostNorA: String; const TimeOut: Word): Boolean;
var
hIP : THandle;
pBuffer: PChar;
pIpe : ^icmp_echo_reply;
lwsaData: WSAData;
Error : DWORD;
Counter: Word;
// destAddress : In_Addr;
// pHostEn : PHostEnt;
begin
// Создаем handle
hIP := IcmpCreateFile();

Error := WSAStartup(MakeWord(1,1), lwsaData);
if (Error <> 0) then RaiseLastOSError;

GetMem( pIpe, sizeof(icmp_echo_reply) + 32);
GetMem( pBuffer, 32);
pIpe.Data := pBuffer;
pIpe.DataSize := 32;
Result := False;

try
for Counter := 1 to 4 do
begin
IcmpSendEcho(hIP,
Str2IP(HostNorA),
pBuffer,
32,
Nil,
pIpe,
sizeof(icmp_echo_reply) + 32,
TimeOut);

Error := GetLastError();

if (error = 0) then Result := True;
end;
finally
IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);
FreeMem(pBuffer);
end;
end;


Anatoly Podgoretsky   (2003-09-05 21:44:00) [3]

Это посторонний модуль, возможно на JEDI есть


SiONYX   (2003-09-05 21:27:00) [4]

В догон: в той программе, которую выложил Вася Пупкин, есть ссылка на модуль winsock2, которого у меня нет. Кто-ньть может подсказать, где ее добыть?


panov   (2003-09-05 20:37:00) [5]

Для решения этой задачи надо использовать сокеты на API, в этом случае можешь сам определить TimeOut.


SiONYX   (2003-09-05 20:31:00) [6]

Спасибо, что проявили интерес и ответили на мой вопрос. Спасибо и за исходный текст программы. Спасибо так же и за мысль (трезвую :), что ping может работать не правильно (для определения сервиса) - я сделал выводы - буду писать :)

Еще раз спасибо всем :)


Е-Моё имя   (2003-09-05 20:01:00) [7]


> А давайте голосовать?

давайте!
я буду первым. голосую! да-да-нет-да!


Anatoly Podgoretsky   (2003-09-05 19:58:00) [8]

Делай, разрешаем.

panov © (05.09.03 18:26) [17]
А ты в Потрепаться не бросишь :-)


panov   (2003-09-05 18:26:00) [9]

>Е-Моё имя © (05.09.03 18:22) [16]
думаю надо разрешить... а то обидица..

Хотя и так тоже может обидеться...

А давайте голосовать?


Е-Моё имя   (2003-09-05 18:22:00) [10]

думаю надо разрешить... а то обидица..


panov   (2003-09-05 18:07:00) [11]

Вася Пупкин © (05.09.03 18:05) [14]
а кто спорит ? для того и использую -)

Так разрешаем использовать или нет?


Вася Пупкин   (2003-09-05 18:05:00) [12]

> а кто спорит ? для того и использую -)


Anatoly Podgoretsky   (2003-09-05 17:56:00) [13]

Polevi © (05.09.03 17:49) [12]
Не всегда, а вот посылка NOP практически всегда


Polevi   (2003-09-05 17:49:00) [14]

ping иногда может быть полезен - некоторые провайдеры (Sky Link) рвут связь после определенного таймаута - ping помогает поддерживать это соединение


Anatoly Podgoretsky   (2003-09-05 17:19:00) [15]

Вася Пупкин © (05.09.03 17:10) [9]
Неверно, кто запрещает, ему же разрешение нужно.


panov   (2003-09-05 17:13:00) [16]

Господа, нужно написать программно пинг, что-бы можна было изменять размер пакета и отслеживать процент потерь, и куда-то это записывать

Конечно нужно.
А вопрос какой?


Вася Пупкин   (2003-09-05 17:10:00) [17]

Что мешает ? %)


RIPSys   (2003-09-05 17:01:00) [18]

Господа, нужно написать программно пинг, что-бы можна было изменять размер пакета и отслеживать процент потерь, и куда-то это записывать


Е-Моё имя   (2003-09-05 11:59:00) [19]


> Излишество это и извращение.

точна! а фсё от непонимания...


Reindeer Moss Eater   (2003-09-05 11:18:00) [20]

Идея следующая: прежде чем пытаться соединиться с удаленной машиной - пропинговать ее.

Идея бесполезная и ненужная.

прежде чем пытаться соединиться с удаленной машиной
то есть приложение хочет получить какой-то сервис от удаленного хоста.

пропинговать ее
Для проверки доступности совершенно иного сервиса зачем-то прибегают к помощи сервиса ping.

И что это даст? Допустим требуемый сервис на удаленном хосте отсутствует, а ICMP пакеты к нему проходят. Допустим что нужный сервис на том хосте готов принять наш запрос а ICMP пакеты к нем рубятся его сетевым экраном.
Излишество это и извращение.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо