Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.27;
Скачать: CL | DM;

Вниз

Ping   Найти похожие ветки 

 
Alpupil ©   (2004-05-04 21:05) [0]

Уважаемые мастера, я пишу программу по учету денег затраченных на Интернет и чтобы отследить соединение с Интернетом использую следующий код
function status:boolean;
var TpRasCon:array[0..255] of tRasConna;
  lg:Longint;
  lpcon: Longint;
  RetVal ,i: Longint;
  Tstatus : tRasConnStatusA;
begin   lpcon:= 0;
FillChar(tprascon, SizeOf(Trasconna), 0);  
TpRasCon[0].dwSize := sizeof(tRasConnA);
lg:= 255 * TpRasCon[0].dwSize;
RetVal:= RasEnumConnections(@TpRasCon[0], lg, lpcon);
Tstatus.dwSize:= sizeof(tRasConnStatusA);
RetVal:= RasGetConnectStatus(TpRasCon[0].hRasConn, Tstatus);
if lpcon>0 then ;
If Tstatus.RasConnState = $2000 Then  result:= True
Else  result:= false
end;
но это является косвенным признаком того что соединение с Инетом есть.

В форуме встречал такую тему как Ping (с примером), может ли этот способ помочь в определении соединения  с Инетом, и где можно подробнее почитать на эту тему или может есть что-то попроще?
Спасибо всем кто потратит свое время.


 
Algol   (2004-05-04 21:25) [1]

Пинг осуществляется с помощью протокола ICMP, для него есть компонент IdIcmpClient. Про ICMP в яндексе неделями можно читать.


 
-=Rezya=-   (2004-05-04 23:03) [2]

Если интересует Ping то пользуйся WinApi функциями. Здесь про это было если нет то смотри и изучай этот фрагмент кода бы здесь опубликован в сатье "Реализация ping с помощью ICMP API" Автора Владимира Артемова.

Ниже приведен базовый фрагмент кода, необходимый для однократного посыла эхо-запроса:

procedure TForm1.Button1Click(Sender: TObject);
var
   hIP : THandle;
   pingBuffer : array [0..31] of Char;
   pIpe : ^icmp_echo_reply;
   pHostEn : PHostEnt;
   wVersionRequested : WORD;
   lwsaData : WSAData;
   error : DWORD;
   destAddress : In_Addr;
begin
   
   // Создаем handle
   hIP := IcmpCreateFile();
   
   GetMem( pIpe,
           sizeof(icmp_echo_reply) + sizeof(pingBuffer));
   pIpe.Data := @pingBuffer;
   pIpe.DataSize := sizeof(pingBuffer);

   wVersionRequested := MakeWord(1,1);
   error := WSAStartup(wVersionRequested,lwsaData);
   if (error <> 0) then
   begin
        Memo1.SetTextBuf("Error in call to "+
                         "WSAStartup().");
        Memo1.Lines.Add("Error code: "+IntToStr(error));
        Exit;
   end;
   
   pHostEn := gethostbyname("delphi.mastak.com");
   error := GetLastError();
   if (error <> 0) then
   begin
        Memo1.SetTextBuf("Error in call to"+
                         "gethostbyname().");
        Memo1.Lines.Add("Error code: "+IntToStr(error));
        Exit;
   end;
   
    destAddress := PInAddr(pHostEn^.h_addr_list^)^;

     // Посылаем ping-пакет
   Memo1.Lines.Add("Pinging " +
                   pHostEn^.h_name+" ["+
                   inet_ntoa(destAddress)+"] "+
                   " with "+
                   IntToStr(sizeof(pingBuffer)) +
                   " bytes of data:");

   IcmpSendEcho(hIP,
                destAddress.S_addr,
                @pingBuffer,
                sizeof(pingBuffer),
                Nil,
                pIpe,
                sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                5000);

   error := GetLastError();
   if (error <> 0) then
   begin
        Memo1.SetTextBuf("Error in call to "+
                         "IcmpSendEcho()");
        Memo1.Lines.Add("Error code: "+IntToStr(error));
        Exit;
   end;

    // Смотрим некоторые из вернувшихся данных
   Memo1.Lines.Add("Reply from "+
               IntToStr(LoByte(LoWord(pIpe^.Address)))+"."+
               IntToStr(HiByte(LoWord(pIpe^.Address)))+"."+
               IntToStr(LoByte(HiWord(pIpe^.Address)))+"."+
               IntToStr(HiByte(HiWord(pIpe^.Address))));
   Memo1.Lines.Add("Reply time: "+IntToStr(pIpe.RTTime)+" ms");

   IcmpCloseHandle(hIP);
   WSACleanup();
   FreeMem(pIpe);
end;




Страницы: 1 вся ветка

Текущий архив: 2004.06.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
6-1083794068
saNat
2004-05-06 01:54
2004.06.27
Outlook Express


8-1081407914
Pavor
2004-04-08 11:05
2004.06.27
Как нарисовать на Paintbox другой формы?


1-1086845037
Алексей
2004-06-10 09:23
2004.06.27
Перевод шестнадцатеричного числа в двоичное


14-1086811730
Infeligo
2004-06-10 00:08
2004.06.27
Какой софт использовать для зелёного экрана?


14-1086714635
Evgeniy_K
2004-06-08 21:10
2004.06.27
Альтернатива Graphics