Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

1. Задание по лабораторной работе

Создать клиент-серверное приложение, выполняющее рассылку сервером информации всем подключенным клиентам.

1.1. Создание серверного приложения

Создать серверное приложение, имеющее вид, представленный на рис. 1.

Рис. 1

Серверное приложение должно выполнять следующие действия.

  • Задавать номер сокета, на котором сервер будет принимать запросы клиентов.

  • Переводить компонент TServerSocket в активное состояние.

  • Устанавливать соединение с клиентом.

  • Периодически с интервалом в 1 секунду передавать всем подсоединенным клиентам информацию о статусе виртуальной памяти и показания системных часов на сервере.

Для выполнения перечисленных действий следует:

1) Создать проект.

2) Присвоить форме имя ServerForm.

  1. Установить на форме компонент TServerSocket, компонент TTimer (страница System Палитры компонентов), компонент TListBox и компо­нент TStatusBar (страница Win32 Палитры компонентов).

  2. Установите следующие свойства компонента TServerSocket (с помо­щью инспектора объектов):

Name - ServerSocket;

Port - 1024 (или любой другой).

5) Установите следующие свойства компонента TTimer; Name-Timer1;

Interval - 1000 (или любой другой).

  1. Установите следующие свойства компонента TListBox:

Name - ClientsListBox;.

  1. Установите следующие свойства компонента TStatusBar:

Name-Statusbar1;.

8) Для события OnCreate формы ServerForm записать следующий программный код:

procedure TServerForm.FormCreate(Sender: TObject);

begin

ServerSocket.Active := True;

Slatusbar1.SimpleText := 'Прослушивание канала...'

end;.

9) Для события OnTimer компонента Timer1 записать следующий программный код:

procedure TServerForm.Timer1Timer(Sender: TObject);

var i: Integer; s: String;

ms: TMemoryStatus;

begin

// Передача информации о систем. времени всем подключенным клиен­там

with ServerSocket.Socket do for i := 0 to ActiveConnections-l do

Connections[i].SendText('T’ + FormatDateTime(hh-nn-ss', Time));

// Передача информации о статусе виртуальной памяти всем подклю­ченным// клиентам

Global MemoryStatus( ms);

s := Format('%10dK', [(ms.dwAvailPageFile+ms.dwAvailPhys) div 1024]);

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

Connections[i].SendText('M' + s);

end;.

10) Для события OnClientConnect компонента ServerSocket записать следующий программный код:

procedure TServerForm.ServerSocketClientConnect(Sender: Tobject;

Socket: TCustomWinsocket);

begin

ClientsListBox.Items.AddObject(Format('Установлено соединение с %s',

[Socket.RemoteAddress]),

Socket);

Statusbar1.SimpleText := 'Прослушивание канала...';

end;.

10) Для события OnClientDisconnect (разрыв соединения со стороны клиента) компонента ServerSocket записать следующий программный код:

procedure TserverForm.ServerSocketClientDisconnect(Sender: TObject;

Socket: TCustomWinsocket);

var i: Integer;

begin

//Если все клиенты отключены, сервер переводится в пассивное состояние

if ServerSocket.Socket.ActiveConnections=0 then Server Socket.Active := False;

// Просматривается список ClientsListBox всех соединений и из списка удаляется строка

// соответствующая закрываемому соединению

for i := 0 to ClientsListBox.Count-1 do

if ClientsListBox.Items.Objects[i]-Socket then

begin

ClientsListBox.ltems.Delete(i);

break;

end;

Statusbar1.SimpleText:= 'Прослушивание канала...’;

end;.

11) Для события OnClientError компонента ServerSocket записать следующий программный код:

procedure TServerForm.ServerSocketClientError(Sender: TObject; Socket:

TCustomWinsocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);

begin

StatusBar1.SimpleText:=Format('Ошибка клиента %s: %s',

[Socket.RemoteAddress, SysErrorMessage(ErrorCode)]);

ErrorCode:=0;

end;.

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