Главная страница
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.036 c
6-1083429890
Xenja
2004-05-01 20:44
2004.06.27
IP пакеты


1-1086740941
AleKo
2004-06-09 04:29
2004.06.27
Пронумеровать строки в TDBGridEh


1-1087138341
Agent[007]
2004-06-13 18:52
2004.06.27
EAccessVolation


3-1085927949
ertong
2004-05-30 18:39
2004.06.27
Popup in Popup


3-1086078957
very beginer
2004-06-01 12:35
2004.06.27
Шрифты в DBGrid и DBEdit