Форум: "Сети";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c