Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursach_OUVS.docx
Скачиваний:
43
Добавлен:
26.09.2019
Размер:
85.61 Кб
Скачать

Функции и процедуры

Клиент

Функция получения своего айпи:

function TForm1.GetLocalIP: String;

Процедура запроса погоды, клиентом:

procedure TForm1.Button1Click(Sender: TObject);

Процедура получения пакета клиентом:

procedure TForm1.sUDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

Процедура, таймер проверки связи с сервером:

procedure TForm1.Timer1Timer(Sender: TObject);

Процедура, таймер проверки был ли получен ответ от сервера в установленное время

procedure TForm1.Timer2Timer(Sender: TObject);

Процедура установка начальный параметров клиента:

procedure TForm1.FormCreate(Sender: TObject);

Процедура управления формой:

procedure TForm1.Button3Click(Sender: TObject);

Сервер

Функция получения своего айпи:

function TForm1.GetLocalIP: String;

Процедура установка начальный параметров клиента:

procedure TForm1.FormCreate(Sender: TObject);

Процедура анализа полученного пакета и соответствующего ответа:

procedure TForm1.sUDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

Интерфейс

Форма сервера:

Форма клиента:

Код программы клиента:

unit Unit1;

interface

uses

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

Dialogs,IdSocketHandle, StdCtrls, IdBaseComponent, IdComponent,

IdTCPConnection, IdTCPClient, IdUDPBase, IdUDPClient, ExtCtrls,

IdUDPServer, IdTCPServer, jpeg, Buttons, FileCtrl,WinSock;

type

TForm1 = class(TForm)

Button1: TButton;

s: TIdUDPServer;

c: TIdUDPClient;

Eip: TEdit;

Timer1: TTimer;

Timer2: TTimer;

Memo1: TMemo;

Image1: TImage;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Eip2: TEdit;

Label5: TLabel;

Eport: TEdit;

Button2: TButton;

Button3: TButton;

Bevel1: TBevel;

procedure Button1Click(Sender: TObject);

procedure sUDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

procedure Timer1Timer(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure s2UDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

procedure FormCreate(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

function GetLocalIP: String;

{ Private declarations }

public

{ Public declarations }

Mip:string;

ncs:byte;

end;

var

Form1: TForm1;

numP: byte;

implementation

{$R *.dfm}

function TForm1.GetLocalIP: String;

const WSVer = $101;

var

wsaData: TWSAData;

P: PHostEnt;

Buf: array [0..127] of Char;

begin

Result := '';

if WSAStartup(WSVer, wsaData) = 0 then begin

if GetHostName(@Buf, 128) = 0 then begin

P := GetHostByName(@Buf);

if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);

end;

WSACleanup;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

c.Port:=strtoint(eport.text);

c.Active:=true;

c.Send('z'+ GetLocalIP);

c.Active:=false;

end;

procedure TForm1.sUDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

var

i : integer;

mas : array [0..1000] of char;

str,pg : string;

begin

if numP<>0 then

begin

if ncs=1 then

Memo1.Lines.Add('Подключение к серверу 1 востановленно')

else

Memo1.Lines.Add('Подключение к серверу 2 востановленно');

end;

numP:=0;

timer2.Enabled:=false;

Adata.Read(mas,100);

for i:=0 to 1000 do

begin

if mas[i]<>'' then

str:=str+mas[i]

else

break;

end;

if mas[0]='z' then

begin

if mas[1]='d' then Image1.Picture.LoadFromFile('d.jpg');

if mas[1]='p' then Image1.Picture.LoadFromFile('p.jpg');

if mas[1]='s' then Image1.Picture.LoadFromFile('s.jpg');

if mas[1]='o' then Image1.Picture.LoadFromFile('o.jpg');

for i:=2 to 1000 do

begin

if mas[i]<>'#' then

pg:=pg+mas[i]

else

break;

end;

label1.Caption:=pg;

end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

//c.Host:=eip.Text;

c.Port:=strtoint(eport.text) ;

c.Active:=true;

c.Send('p'+Mip+'!' );

c.Active:=false;

timer2.Enabled:=true;

end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

if numP=0 then

begin

if ncs=1 then

Memo1.Lines.Add('Потерянна связь с сервером 1. Попытка подключения ¹1')

else

Memo1.Lines.Add('Потерянна связь с сервером 2. Попытка подключения ¹1');

end;

if numP=1 then

begin

if ncs=1 then

Memo1.Lines.Add('Потерянна связь с сервером 1. Попытка подключения ¹2')

else

Memo1.Lines.Add('Потерянна связь с сервером 2. Попытка подключения ¹1');

end;

if numP>1 then

begin

timer2.Enabled:=false;

if ncs=1 then

begin

c.Host:=eip2.Text;

ncs:=2;

numP:=0;

Memo1.Lines.Add('Потерянна связь с сервером 1. Попытка подключения ко второму');

end

else

begin

c.Host:=eip.Text ;

ncs:=1;

numP:=0;

Memo1.Lines.Add('Потерянна связь с сервером 2. Попытка подключения к первому');

end;

end;

numP:=numP+1;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

s.DefaultPort:=strtoint(eport.Text)

end;

procedure TForm1.s2UDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

var

i : integer;

mas : array [0..1000] of char;

str : string;

begin

Adata.Read(mas,100);

for i:=0 to 1000 do

begin

if mas[i]<>'' then

str:=str+mas[i]

else

break;

end;

timer2.Enabled:=false;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Mip:=GetLocalIP;

c.Host:=eip.Text;

numP:=0;

ncs:=1;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if Button3.caption='Скрыть настройки' then

begin

label2.Visible:=false;

label3.Visible:=false;

label4.Visible:=false;

label5.Visible:=false;

eip.Visible:=false;

eip2.Visible:=false;

eport.Visible:=false;

Button2.Visible:=false;

Memo1.Visible:=false;

Form1.Height:=180;

button3.Caption:='Показать настройки';

end

else

begin

label2.Visible:=true;

label3.Visible:=true;

label4.Visible:=true;

label5.Visible:=true;

eip.Visible:=true;

eip2.Visible:=true;

eport.Visible:=true;

Button2.Visible:=true;

Memo1.Visible:=true;

Form1.Height:=400;

Button3.caption:='Скрыть настройки';

end

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]