Создание программного продукта на основании клиент-серверной технологии, реализующего отказоустойчивую работу системы, которая способна в случае потери связи с ведущим сервером подключить клиента к альтернативному серверу (на примере сервера погоды).
Аннотация к работе
В случае потери связи с одним из серверов клиент подключается на другой сервер. В случае получения пакета по этому порту анализируется содержащаяся в пакете информация, если первый символ “p” то это пакет проверки связи от клиента, после символа «p» содержится айпи адрес отправителя на который отправляется пакет аналогичного типа с информацией о том что сервер доступен. Клиент после запуска начинает с определенной частотой отправлять пакеты проверки связи на первый адрес из списка серверов. В случае если в установленный интервал ответный пакет не вернулся, осуществляется две повторных попытки подключения на этот же сервер, далее в случае успеха «рабочим» сервером остается все тот же, иначе осуществляется проверка связи со вторым сервером в списке, потом с третьим и т.д. Код программы клиента: 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); var i : integer; mas : array [0..1000] of char; str,pg : string; begin if NUMP0 then begin if ncs=1 then Memo1.Lines.Add("Iiaee??aiea e na?aa?o 1 ainoaiiaeaiii") else Memo1.Lines.Add("Iiaee??aiea e na?aa?o 2 ainoaiiaeaiii"); 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; 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); end; procedure TFORM1.Timer2Timer(Sender: TOBJECT); begin if NUMP=0 then begin if ncs=1 then Memo1.Lines.Add("Iioa?yiia naycu n na?aa?ii 1.Получен программный продукт, реализующий отказоустойчивую систему на основе клиент серверной технологии.
План
Содержание
Введение
Постановка задачи
Алгоритм работы
Функции и процедуры
Интерфейс
Код программы
Заключение
Введение
Вывод
Получен программный продукт, реализующий отказоустойчивую систему на основе клиент серверной технологии. Программа проверена на практике. В случае потери связи с ведущим сервером клиент успешно переключается на альтернативный. Поставленная задача выполнена.