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

Код программы сервера:

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)

s: TIdUDPServer;

c: TIdUDPClient;

Eport: TEdit;

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

Edit2: TEdit;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

RadioButton3: TRadioButton;

RadioButton4: TRadioButton;

Label3: TLabel;

Label4: TLabel;

function GetLocalIP: String;

procedure sUDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

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.sUDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

var

i : integer;

zap: boolean;

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

str,pg : string;

begin

zap:=false;

str:='';

Adata.Read(mas,100);

for i:=1 to 1000 do

begin

if mas[i]<>'!' then

str:=str+mas[i]

else

break;

end;

if mas[0]='p' then

begin

c.Host:=str;

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

c.Active:=true;

c.Send('p1o');

c.Active:=false;

end;

if mas[0]='z' then

begin

c.Host:=str;

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

c.Active:=true;

if RadioButton1.Checked then

pg:='s';

if RadioButton2.Checked then

pg:='p';

if RadioButton3.Checked then

pg:='o';

if RadioButton4.Checked then

pg:='d';

c.Send('z'+pg+edit2.Text+'#');

c.Active:=false;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

s.Active:=true;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

label4.Caption:=Form1.GetLocalIP

end;

end.

Заключение

Получен программный продукт, реализующий отказоустойчивую систему на основе клиент серверной технологии. Программа проверенна на практике. В случае потери связи с ведущим сервером клиент успешно переключается на альтернативный. Поставленная задача выполнена.

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