Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив3 / kursach(16)_1 / курсач / Код клиентской программы

.doc
Скачиваний:
5
Добавлен:
07.08.2013
Размер:
78.85 Кб
Скачать

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

unit mainform;

interface

uses

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

Dialogs, StdCtrls, ScktComp, ExtCtrls, TeEngine, Series, TeeProcs, Chart;

type

TForm1 = class(TForm)

cServ: TButton;

dServ: TButton;

servPort: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

ClientSocket: TClientSocket;

logClient: TMemo;

ServerIP: TComboBox;

addIP: TButton;

Label6: TLabel;

T1_ob: TEdit;

Label7: TLabel;

T2_ob: TEdit;

Label8: TLabel;

K_ob: TEdit;

Label9: TLabel;

Button2: TButton;

Nastr: TEdit;

Label10: TLabel;

procedure FormCreate(Sender: TObject);

procedure addIPClick(Sender: TObject);

procedure cServClick(Sender: TObject);

procedure dServClick(Sender: TObject);

procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;

ErrorEvent: TErrorEvent; var ErrorCode: Integer);

procedure ClientSocketLookup(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocketConnecting(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocketConnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocketDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocketRead(Sender: TObject;

Socket: TCustomWinSocket);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

dServ.Enabled:=false;

cServ.Enabled:=true;

servPort.Enabled:=true;

serverIP.Enabled:=true;

Nastr.Enabled:=false;

ServerIP.Items.LoadFromFile('ipserv.cfg');

form1.Caption:='Client status [:: отключен ::]';

end;

procedure TForm1.addIPClick(Sender: TObject);

begin

if serverIP.Text <> '' then

begin

serverIP.Items.Add(serverIP.Text);

serverIP.Items.SaveToFile('ipserv.cfg');

end;

end;

procedure TForm1.cServClick(Sender: TObject);

begin

if serverIP.Text = '' then

begin

MessageBox(0,'Вы не ввели IP адрес сервера. Попробуйте еще раз.', 'Attention, please!',0);

exit;

end;

dServ.Enabled:= not dServ.Enabled;

cServ.Enabled:= not cServ.Enabled;

servPort.Enabled:= not servPort.Enabled;

serverIP.Enabled:= not serverIP.Enabled;

//--- Устанавливаем свойства Host и Port

if ClientSocket.Active then

ClientSocket.Close;

ClientSocket.Host := serverIP.Text;

ClientSocket.Port := StrToInt(servPort.text);

//--- Пытаемся соединиться

ClientSocket.Open;

end;

procedure TForm1.dServClick(Sender: TObject);

begin

dServ.Enabled:= not dServ.Enabled;

cServ.Enabled:= not cServ.Enabled;

servPort.Enabled:= not servPort.Enabled;

serverIP.Enabled:= not serverIP.Enabled;

//--- Закрываем соединение (если оно установлено)}

if ClientSocket.Active then

ClientSocket.Close;

end;

procedure TForm1.ClientSocketError(Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

//--- Если произошла ошибка, выводим ее код в logClient}

logClient.Lines.Add(TimeToStr(Time)+'<client> Socket error ('+IntToStr(ErrorCode)+')');

end;

procedure TForm1.ClientSocketLookup(Sender: TObject;

Socket: TCustomWinSocket);

begin

//--- Сообщаем о том, что идет поиск сервера

logClient.Lines.Add(TimeToStr(Time)+'<client> идет поиск сервера...');

end;

procedure TForm1.ClientSocketConnecting(Sender: TObject;

Socket: TCustomWinSocket);

begin

//--- соединяемся...

logClient.Lines.Add(TimeToStr(Time)+'<client> идет соединение с сервером...');

end;

procedure TForm1.ClientSocketConnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

//--- соединились

form1.Caption:='Client status [:: подключен ::]';

logClient.Lines.Add(TimeToStr(Time)+'<client> соединение с сервером прошло успешно.');

end;

procedure TForm1.ClientSocketDisconnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

//--- отсоединились

MessageBox(0,'Произошло отключение от сервера. Попытайте свои силы в другой раз.', 'Соединение потеряно...',0);

form1.Caption:='Client status [:: отключен ::]';

logClient.Lines.Add(TimeToStr(Time)+'<client> соединение с сервером разорвано...');

dServ.Enabled:=false;

cServ.Enabled:=true;

servPort.Enabled:=true;

serverIP.Enabled:=true;

end;

procedure TForm1.ClientSocketRead(Sender: TObject;

Socket: TCustomWinSocket);

var s: string;

begin

s := Socket.ReceiveText;

Nastr.Text:=s;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if (K_ob.Text = '') or (T1_ob.Text = '') or (T2_ob.Text = '') then

MessageBox(0,'Вы не ввели апараметры объекта', 'Attention, please!',0)

else

ClientSocket.Socket.SendText(K_ob.Text+';'+T1_ob.Text+';'+T2_ob.Text+';');

end;

end.

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

unit mainform;

interface

uses

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

Dialogs, StdCtrls, ScktComp, Sockets, ExtCtrls;

type

TForm1 = class(TForm)

ServerStart: TButton;

ServerStop: TButton;

LogList: TMemo;

ServerSocket: TServerSocket;

ServerPort: TEdit;

Label1: TLabel;

ClientsList: TMemo;

procedure FormCreate(Sender: TObject);

procedure ServerStartClick(Sender: TObject);

procedure ServerStopClick(Sender: TObject);

procedure ServerSocketClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ServerSocketClientRead(Sender: TObject;

Socket: TCustomWinSocket);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

socketraddr: array [0..666] of string;

client_num: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

ServerStart.Enabled:=true;

ServerStop.Enabled:=false;

ServerPort.Enabled:=true;

end;

procedure TForm1.ServerStartClick(Sender: TObject);

begin

//--- Устанавливаем порт

if ServerPort.Text = '' then

begin

MessageBox(0,'Вы не ввели порт сервера. Попробуйте еще раз.', 'Attention, please!',0);

exit;

end;

ServerSocket.Port := StrToInt(serverPort.Text);

ServerStart.Enabled:= not ServerStart.Enabled;

ServerStop.Enabled:= not ServerStop.Enabled;

ServerPort.Enabled:= not ServerPort.Enabled;

Form1.Caption:='Server status [:: запущен ::]';

Loglist.Lines.clear;

Loglist.Lines.Add(TimeToStr(Time)+'<server> сервер запущен');

//--- Запускаем сервер

ServerSocket.Open;

end;

procedure TForm1.ServerStopClick(Sender: TObject);

begin

ServerStart.Enabled:= not ServerStart.Enabled;

ServerStop.Enabled:= not ServerStop.Enabled;

ServerPort.Enabled:= not ServerPort.Enabled;

if ServerSocket.Active then

ServerSocket.Close;

//--- Записываем результаты работы в файл

Form1.Caption:='Server status [:: остановлен ::]';

Loglist.Lines.Add(TimeToStr(Time)+'<server> сервер остановлен');

Loglist.Lines.SaveToFile('last_start.log');

Loglist.Lines.Add(TimeToStr(Time)+'<server> данные о последнем запуске записаны в файл last_start.log');

end;

procedure TForm1.ServerSocketClientConnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

//--- Кто-то присоединился или отсоединился?

ClientsList.Lines.Clear;

if ServerSocket.Socket.ActiveConnections>=1 then

begin

for client_num := 0 to ServerSocket.Socket.ActiveConnections-1 do

begin

socketraddr[client_num]:=ServerSocket.Socket.Connections[client_num].RemoteAddress;

ClientsList.Lines.Add(TimeToStr(Time)+'<server> Произошло подключение с IP='+socketraddr[client_num]);

end;

end;

end;

procedure TForm1.ServerSocketClientRead(Sender: TObject;

Socket: TCustomWinSocket);

var s, clientIP: string;

K, T1, T2: Double;

begin

clientIP:=Socket.RemoteAddress;

s := Socket.ReceiveText;

for client_num := 0 to ServerSocket.Socket.ActiveConnections-1 do

if clientIP = socketraddr[client_num] then

begin

Loglist.Lines.Add(TimeToStr(Time)+'<server> Поступили следующие параметры передаточной функции объекта управления');

K:=StrToFloat(Copy(s,1,Pos(';',s)-1));

Delete(s,1,Pos(';',s));

Loglist.Lines.Add('K='+FloatToStr(K));

T1:=StrToFloat(Copy(s,1,Pos(';',s)-1));

Delete(s,1,Pos(';',s));

Loglist.Lines.Add('T1='+FloatToStr(T1));

T2:=StrToFloat(Copy(s,1,Pos(';',s)-1));

Delete(s,1,Pos(';',s));

Loglist.Lines.Add('T2='+FloatToStr(T2));

if (K = 0) or (T2 = 0) then

ServerSocket.Socket.Connections[client_num].SendText('K и T2 должны быть отличны от нуля')

else if T1=0 then

ServerSocket.Socket.Connections[client_num].SendText('T1=0 нет смысла')

else

ServerSocket.Socket.Connections[client_num].SendText('Kp='+FloatToStr(T1/(2*K*T2))+' Ti='+FloatToStr(T1));

end;

end;

end.

Соседние файлы в папке курсач