Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовый диплом.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
8.07 Mб
Скачать

3.4Delphi 7 көмегімен программалау

«Шымкент қаласындағыWi-Max технологиясы» жобасын еңгізу кезінде желінің барлық барлық компаненттері жұмыс қалпында болуы қажет. Желінің барлық түйіндерін тексеру үшін , ІР-телефондарын қосқанда, ICMP протоколы бойынша сұраныс жібереді.Бұл амал стандартты Ping программасы көмегімен орындалады. Ping – бұл қызметтік компьютерлік программа, TCP/IP негізінде желідегі байланысты тексеруге арналған.Ол ICMP протоколының Echo-Request сұраныстарын көрсетілген желі түйініне жібереді және қабылданған жауаптарды бекітеді (ICMP Echo-Reply). Сұранысты жіберу және жауапты қабылдау арасындағы уақыт маршрут және жиілік бойынша пакеттер жоғалтулардың екі жақты шегеруін анықтайды,ол дегеніміз деректер тарату мен аралық құрылғылардағы каналдардың бос еместігін анықтайды. Тағы пинг деп компьпютерлік желілердегі клиентен серверге немесе керісінше серверден клиентке пакеттік деректерді тартуға кеткен уақытты айтады, ол милисекундпен өлшенеді.Пинг уақыты клиенттен серверге дейінгі аралықтағы арнаның байланыс жылдамдығы мен арна жектемесіне байланысты. ICMP жауаптың мүлдем болмауы шекті түйін (немесе кез-келген аралық маршрутизаторлар)ICMP Echo-Reply немесе ICMP Echo-Request сұраныстарын өткізбейді немесе тежейді деген сөз.

Бұл жобаны құрастыру кезінде осы сияқты жоба Delphi 7 тілінде жасалынды. Бұл жоба ICMP хаттамасы бойынша да жұмыс жасайды және эхо сұраныстарды жібереді.Программаның сипаты келесі сурет–3.1 көрсетілген.

Сурет 3.11 – «Ping» программасының түрі

Программаның бастапқы коды:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,

IdIcmpClient, XPMan;

type

TForm1 = class(TForm)

IdIcmpClient1: TIdIcmpClient;

GroupBox1: TGroupBox;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Edit3: TEdit;

Label3: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Memo1: TMemo;

Button1: TButton;

Button2: TButton;

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure Ping(IP: String; OutMemo:TMemo);

const BUFSIZE = 2000;

var SecAttr : TSecurityAttributes;

hReadPipe,

hWritePipe : THandle;

StartupInfo: TStartUpInfo;

ProcessInfo: TProcessInformation;

Buffer : Pchar;

WaitReason,

BytesRead : DWord;

begin

with SecAttr do

begin

nlength := SizeOf(TSecurityAttributes);

binherithandle := true;

lpsecuritydescriptor := nil;

end;

if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then

begin

Buffer := AllocMem(BUFSIZE + 1);

FillChar(StartupInfo, Sizeof(StartupInfo), #0);

StartupInfo.cb := SizeOf(StartupInfo);

StartupInfo.hStdOutput := hWritePipe;

StartupInfo.hStdInput := hReadPipe;

StartupInfo.dwFlags := STARTF_USESTDHANDLES +

STARTF_USESHOWWINDOW;

StartupInfo.wShowWindow := SW_HIDE;

if CreateProcess(nil,

PChar('ping.exe '+IP),

@SecAttr,

@SecAttr,

true,

NORMAL_PRIORITY_CLASS,

nil,

nil,

StartupInfo,

ProcessInfo) then

begin

repeat

WaitReason := WaitForSingleObject( ProcessInfo.hProcess,100);

Application.ProcessMessages;

until (WaitReason <> WAIT_TIMEOUT);

Repeat

BytesRead := 0;

ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);

Buffer[BytesRead]:= #0;

OemToAnsi(Buffer,Buffer);

OutMemo.Text := OutMemo.text + String(Buffer);

until (BytesRead < BUFSIZE);

end;

FreeMem(Buffer);

CloseHandle(ProcessInfo.hProcess);

CloseHandle(ProcessInfo.hThread);

CloseHandle(hReadPipe);

CloseHandle(hWritePipe);

end;

end;

procedure TForm1.RadioButton1Click(Sender: TObject);

begin

edit5.Visible:=false;

edit1.Visible:=true;

edit2.Visible:=true;

edit3.Visible:=true;

edit4.Visible:=true;

label1.Visible:=true;

label2.Visible:=true;

label3.Visible:=true;

end;

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

edit5.Visible:=true; edit1.Visible:=false; edit2.Visible:=false;

edit3.Visible:=false;

edit4.Visible:=false;

label1.Visible:=false;

label2.Visible:=false;

label3.Visible:=false;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Memo1.Clear;

if radiobutton1.Checked=true then Ping(edit1.Text+'.'+edit2.Text+'.'+edit3.Text+'.'+edit4.Text,memo1) else

if radiobutton2.Checked=true then Ping(edit5.Text,memo1);

IdIcmpClient1.Ping;

Memo1.Lines.Add(IntToStr(IdIcmpClient1.ReplyStatus.TimeToLive));

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end; end.