Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  151

•  TDictionary Custom Sort  3 331

•  Fast Watermark Sources  3 081

•  3D Designer  4 840

•  Sik Screen Capture  3 334

•  Patch Maker  3 547

•  Айболит (remote control)  3 652

•  ListBox Drag & Drop  3 007

•  Доска для игры Реверси  81 658

•  Графические эффекты  3 936

•  Рисование по маске  3 242

•  Перетаскивание изображений  2 622

•  Canvas Drawing  2 745

•  Рисование Луны  2 573

•  Поворот изображения  2 180

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 233

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 223

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 056

•  Игра HIP  1 281

•  Игра Go (Го)  1 228

•  Симулятор лифта  1 473

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 546

•  Проверка числового ввода  1 363

•  HEX View  1 496

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Маааленькое PING-приложеньице




Два интеpнетчика:
- Попингуй!
- От попингуя слышу.

Протокол Ping предназначен для тестирования компьютерных соединений в Интернете путём посылки через протокол Internet Protocol (IP) по обределённому адресу сообщения и ожидания от него ответа.

ICMP - Internet Control Message Protocol. ICMP служит для передачи сообщений об ошибках а так же управляющих сообщений . ICMP-тест может показать насколько быстро проходит информация между двумя узлами в Интернете.

  1. Запускаем Delphi;
  2. В Новом проекте добавляем в форму Tbutton, Tedit и Tmemo;
  3. Вставляем “winsock”;
  4. объявляем структурку для IP-заголовка:

type
  IPINFO = record
  Ttl: char;
  Tos:har;
  IPFlags: char;
  OptSize: char;
  Options: ^char;
end;

  1. объявляем структурку для хранения ICMP пакета:

type 
  ICMPECHO = record 
  Source: longint; 
  Status: longint; 
  RTTime: longint; 
  DataSize: Shortint; 
  Reserved: Shortint; 
  pData: ^variant; 
  i_ipinfo: IPINFO; 
end; 

  1. Объявляем функции и процедуры, которые мы будем вызывать из ICMP.DLL

TIcmpCreateFile = function():integer;
{$IFDEF WIN32} stdcall; {$ENDIF}

TIcmpCloseHandle = procedure(var handle: integer);
{$IFDEF WIN32} stdcall; {$ENDIF}

TIcmpSendEcho = function(var handle: integer; endereco: DWORD;
buffer: variant; tam: WORD; IP: IPINFO; ICMP: ICMPECHO;
tamicmp: DWORD; tempo: DWORD): DWORD;
{$IFDEF WIN32} stdcall; {$ENDIF}

  1. В TButton в событие Onclick вставляем следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
  wsadt : wsadata;
  icmp :icmpecho;
  HNDicmp : integer;
  hndFile :integer;
  Host :PHostEnt;
  Destino :in_addr;
  Endereco :^DWORD;
  IP : ipinfo;
  Retorno :integer;
  dwRetorno :DWORD;
  x :integer;

  IcmpCreateFile : TIcmpCreateFile;
  IcmpCloseHandle : TIcmpCloseHandle;
  IcmpSendEcho : TIcmpSendEcho;

begin
  if (edit1.Text = '') then
  begin
    Application.MessageBox('Enter a HostName ro a IP Adress', 'Error', MB_OK);
    exit;
  end;
  HNDicmp := LoadLibrary('ICMP.DLL');
  if (HNDicmp <> 0) then
  begin
    @IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile');
    @IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle');
    @IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho');
    if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or (@IcmpSendEcho=nil) then
    begin
      Application.MessageBox('Error getting ICMP Adress’,'Error', MB_OK);
      FreeLibrary(HNDicmp);
    end;
  end;
  Retorno := WSAStartup($0101,wsadt);

  if (Retorno <> 0) then
  begin
    Application.MessageBox('Canґt Load WinSockets','WSAStartup', MB_OK);
    WSACleanup();
    FreeLibrary(HNDicmp);
  end;

  Destino.S_addr := inet_addr(Pchar(Edit1.text));
  if (Destino.S_addr = 0) then
    Host := GetHostbyName(PChar(Edit1.text))
  else
    Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);

  if (host = nil) then
  begin
    Application.MessageBox('Host not found','Error', MB_OK);
    WSACleanup();
    FreeLibrary(HNDicmp);
    exit;
  end;
  memo1.Lines.Add('Pinging ' + Edit1.text);

  Endereco := @Host.h_addr_list;

  HNDFile := IcmpCreateFile();
  for x:= 0 to 4 do
  begin
    Ip.Ttl := char(255);
    Ip.Tos := char(0);
    Ip.IPFlags := char(0);
    Ip.OptSize := char(0);
    Ip.Options := nil;

    dwRetorno := IcmpSendEcho(
    HNDFile,
    Endereco^,
    null,
    0,
    Ip,
    Icmp,
    sizeof(Icmp),
    DWORD(5000));
    Destino.S_addr := icmp.source;
    Memo1.Lines.Add('Ping ' + Edit1.text);
  end;

  IcmpCLoseHandle(HNDFile); 
  FreeLibrary(HNDicmp); 
  WSACleanup();
end;

У данного примера есть один недостаток - программа не воспримет доменное имя, только IP-адресс. Для пользователей NT не используйте функцию IcmpCloseHandle.

Это всё…..

Ну и в конце полный исходный код примера можно взять здесь.





Похожие по теме исходники

Mapping Proxy

PingThread

Pinger

Ping Statistics

 

fbPing




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте