Архив3 / kursach(16)_1 / курсач / Код клиентской программы
.doc
Код клиентской программы
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.