- •«Дальневосточный федеральный университет»
- •Школа естественных наук материалы практических занятий
- •Определение установок сетевого адаптера
- •2.3. Определение сетевого адреса и маски сети
- •Разграничение доступа к сетевым ресурсам
- •2.5. Проверка сетевого соединения в tcp/ip - сетях.
- •1. Теоретическое введение
- •Имена почтовых ящиков.
- •1.2. Сервер почтовых ящиков
- •1.3 Пример создания сервера почтовых ящиков
- •1.4. Клиент почтовых ящиков
- •1.5 Создания клиента почтовых ящиков
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •1. Теоретическое введение
- •1.2. Процедуры и функции Win32 для работы с файлами
- •1.2.1. Создание или открытие файла
- •1.2.2. Запись в файл
- •1.2.3. Чтение из файла
- •1.2.4. Закрытие файла
- •1.3. Пример программы, использующей функции Win32 для доступа к файлам и каталогам
- •1.4. Функции Delphi для работы с файлами
- •1.4.1. Открытие и закрытие файла
- •1.4.2. Типы файлов
- •1.4.3. Обработка ошибок при работе с файлами в Delphi
- •1.5. Пример программы, использующей функции Delphi для доступа к файлам и каталогам
- •2. Задание по лабораторной работе
- •1. Теоретическое введение
- •Пример создания сервера именованных каналов, работающего в блокирующем режиме
- •Пример создания клиента именованных каналов
- •Задание по практическому занятию
- •Создание серверного приложения,
- •Создание клиентского приложения,
- •2.3. Расширение возможностей именованных каналов
- •1. Теоретическое введение
- •1.1. Особенности организации работы именованных
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •Занятие 6. Поиск доступных сетевых ресурсов
- •1. Теоретическое введение
- •Алгоритм поиска сетевых ресурсов
- •1.2. Структуры и функции для работы с сетевыми ресурсами
- •2.Задание по практическому занятию
- •1. Теоретическое введение
- •1.1. Назначение протокола NetBios
- •1.2. Назначение протокола NetBeui
- •2. Задание по практическому занятию
- •Занятие 8. СокетыWindows. Создание клиент-серверного приложения работающего по протоколуUdp
- •1. Теоретическое введние
- •1.1. Сокеты windows
- •1.2. Функции winsock для протокола udp
- •1.2.1. Инициализация интерфейса сокетов
- •1.2.2. Создание сокета
- •1.2.3. Определение номера порта и ip-адреса, по которому сервер будет принимать данные
- •1.2.4. Передача данных
- •2. Задание по практическому занятию
- •2.2. Создание клиентского приложения
- •2.3. Реализация возможностей функций Winsock по передаче данных между различными компьютерами в сети
- •Занятие 9. Исследование возможностей использования сокетов windows для организации обмена информацией между клиентом и сервером по протоколу тср
- •1. Теоретическое введение
- •1.1. Функции Winsock для протокола tcp
- •1.1.1. Установление соединения
- •1.1.3. Блокирование выполнения программы до тех пор, пока не поступит запрос на установление соединения
- •1.1.4. Передача данных
- •1.1.5. Получение данных по сети
- •1.2. Алгоритм работы Winsock- приложения по протоколу tcp
- •2. Задание по лабораторной работе
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •2.3. Исследование возможностей функций Winsock по передаче данных между различными компьютерами в сети
- •Занятие 10. Исследование методов сканирования сети
- •1. Теоретическое введение
- •2.1. Создание многопоточного приложения для сканирования сети
- •2.2. Исследование различных методов сканирования сети
- •Занятие 11. Применение сокетного соединения для обеспечения сетевого взаимодействия клиента и сервера
- •1. Теоретическое введение
- •1.1. Компоненты Delphi, инкапсулирующие сокеты
- •1.2. Компоненты Delphi tcpserver и tcpcl1ent
- •1.2.1. Установление соединения
- •1.2.2. Синхронизация сокетов
- •1.2.3. Класс TserverWinsocket
- •1.2.4. Компонент TserverSocket
- •1.2.5. Класс tClientWinsocket
- •1.2.6. Компонент tClientSocket
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •1. Задание по лабораторной работе
- •1.1. Создание серверного приложения
- •1.2. Создание клиентского приложения
- •1.3. Исследование возможностей сервер-приложения
- •1. Теоретическое введение
- •2. Задание по практическому занятию
- •Занятие 14. Исследование возможностей поддержки протокола тср
- •1. Теоретическое введение
- •1.1. Методы indy-компонента- IdTcpClient
- •1.2. Методы indy-компонента - IdTcpServer
- •2. Задание по лабораторной работе
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •Занятие 15. Программирование клиентских приложений для работы с серверами internet
- •1. Теоретическое введение
- •Библиотека WinInet
- •1.2. Функции библиотеки wininet
- •1.2.1. Функция создания сеанса связи InternetOpen
- •1.2.2. Функция установления url-соединения InternetOpenUrl
- •1.2.3. Функция чтения файла, находящегося на web-cepвepe InternetReadFile
- •1.2.4. Функция закрытия дескриптора – InternetCloscHandle
- •1.2.5. Функция установления соединения InternetConnect
- •1.2.6. Функция «Найти первое вхождение файла с указанным групповым именем» FtpFindFirstFile
- •1.2.7. Функция «Найти следующие вхождения файла с указанным групповым именем» InternetFindNextFile
- •1.2.8. Функция «Получить имя текущего Каталога на ftp-сервере» -FtpGetCurrentDirectory
- •1.2.9. Функция чтения файла с http-сервера FtpGetFile
- •2. Задание по практическому занятию
- •2.1. Создание клиентского приложения.
- •Занятие 16. Приём и передача файлов по сети с использованием протокола tftp
- •1. Теоретическое введение
- •1.1. Протокол tftp
- •1.2. Компонент- idTrivialFtp
- •Компонент IdTrivialFtpServer
- •2. Задание по практическому занятию
- •2.1. Создание серверного приложения
- •2.2. Создание клиентского приложения
- •Занятие 17. Создание http- клиента
- •1. Теоретическое введение
- •1.1. Свойства и методы компонента IdHttp
- •1.1.1. Метод get
- •1.1.2. Метод trace
- •1.1.3. Метод put
- •2. Задание по практическому занятию
- •2.1. Создание http-клиента
- •4. Как изменить приложение таким образом, чтобы файл с сервера записывался не в поле Memo, а в какой-либо файл на компьютере клиента? Каким должен быть тип переменной s в данном случае?
- •Тексты заданий самостоятельной работы задание № 1 создание web-браузера
- •1. Теоретическое введение
- •2. Задание по практическому занятию
- •Задание № 2 исследование telnet-клиента
- •1. Теоретическое введение
- •2. Задание по практическому занятию
- •2.1. Создание приложения Telnet-клиента
- •2.2. Исследование Telnet-клиента
- •Задание №3 разработка cgi-программ
- •1. Теоретическое введение
- •1.1. Принцип работы cgi-программ
- •1.2. Описание тега form
- •1.2.1. Тег input
- •1.2.2. Тег select
- •1.2.3. Тег textarea
- •13. Подтверждение и посылка запроса cgi-программе
- •2. Задание по практическому занятию
- •2.1. Создание простейшего серверного приложения
- •2.2. Передача cgi-приложению параметров, введенных пользователем, и получение дополнительной информации из переменных окружения
- •Задание № 4 разработка web-приложения
- •1. Теоретическое введение
- •1.1. Общее описание компонента twebmodule
- •1.2. Параметр request
- •1.3. Параметр response
- •1.4. События twebmodule
- •2. Задание по практическому занятию
- •2.1. Создание web-приложения с помощью компонента Delphi -webmodule
2. Задание по лабораторной работе
Создайте клиент-серверное приложение передачи команд и данных на сервер. В этой работе для демонстрации возможности передачи данных используется дополнительное пользовательское приложение - сервер. Передача команд осуществляется на Web-сервер и FТР-сервер.
2.1. Создание серверного приложения
Создайте приложение, изображенное на рис. 1. в соответствии с нижеследующими пунктами.
Рис. 1
1) Для создания приложения перенесите на форму компоненты перечисленные в табл. 2.
Таблица 2
Компоненты серверного приложения
Компонент |
Класс |
Описание |
IdTCPServer1 |
TIdTCPServer |
Компонент IdTCPServer, находящийся на странице IdServers Палитры компонентов |
Label1 |
TLabel |
Метка «Порт сервера» |
Label2 |
TLabel |
Метка «Полученное сообщение» |
Edit1 |
TEdit |
Окно для ввода номера порта сервера |
Edit2 |
TEdit |
Окно для вывода полученных сообщений |
Button1 |
TButton |
Кнопка «Запустить сервер» |
Button2 |
TButton |
Кнопка «Завершение работы» |
2) Для события OnClick кнопки «Запустить сервер» запишите следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTcpServer1.DefaultPort := StrTolnt(Edit1.text);
IdTCPServer1.Active:= True;
end;.
Первая команда определяет номер порта, по которому сервер будет принимать данные от клиента. Вторая команда переводит сервер в состояние ожидания сообщений от клиента.
3) Для события OnExecute компонента IdTCPServer1 запишите следующий программный код:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
Edit2.Text:=AThread.Connection.ReadLnWait;
end;.
Эта команда выводит в окно Edit2 полученный от клиента текст.
4)Для события OnClick кнопки «Завершение работы» запишите следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPServer1.Active := False;
Application.Terminate;
end:,
5) Откомпилируйте приложение.
2.2. Создание клиентского приложения
Создайте приложение, изображенное на рис. 2. в соответствии с нижеследующими пунктами.
1) Для создания приложения перенесите на форму компоненты, перечисленные в табл. 3.
2) Настройка панели гуппы радиокнопок. Для свойства Items компонента RadioGroup1 введите две строки с именами серверов (рис. 3).
3) Для события OnActivate формы Form1 запишитe следующий программный код:
procedure TForm1.FormActivate(Sender: TObject);
begin
RadioGroup1.ltemIndex := 0;
end;.
Здесь устанавливает режим выбора Web-сервера по умолчанию.
4) Для события OnClick кнопки «Передача данных» запишите следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Host:= Edit1.Text;
IdTCPClient1.Port:= StrToInt(Edit2.Text);
IdTCPClient1.Connect;
try
IdTCPClient1.WriteLn(Edit3.Text);
finally
IdTCPClient1.Disconnect;
end; end;.
С помощью данного кода компонент IdTCPClient настраивается на работу с определенным сервером и передает ему данные. После передачи данных проводится разрыв соединения командой IdTCPClient1.Disconnect.
Рис. 2
Рис. 3
Таблица 3
Компоненты клиентского приложения
Компонент |
Класс |
Описание |
IdTCPClient1 |
TidTCPClient |
Компонент IdTCPCIient, находящийся на странице IdClients Палитры компонентов |
GroupBox1 |
TroupBox |
Панель «Адрес сервера» |
GroupBox2 |
TroupBox |
Панель «Передача данных» |
GroupBox3 |
TroupBox |
Панель «Передача команд» |
Label 1 |
TLabel |
Метка «Имя или адрес сервера» |
Label 2 |
TLabel |
Метка «Порт сервера» |
Label 3 |
TLabel |
Метка «Передаваемое сообщение» |
Edit1 |
TEdit |
Окно для ввода имени или адреса сервер:! |
Edit2 |
TEdit |
Окно для ввода номера порта сервера |
Edit3 |
TEdit |
Окно для ввода передаваемого на сервер сообщения |
Button 1 |
TButton |
Кнопка «Передача данных» |
Button 2 |
TButton |
Кнопка «Передача команд» |
Button3 |
TButton |
Кнопка «Очистить окно вывода» |
Memo1 |
TMemo |
Многострочное окно вывода сообщений выбранною сервера в ответ на переданную клиентом команду |
RadioGroup1 |
TRadioGroup |
Панель группы радиокнопок |
5) Для события OnClick кнопки «Передача команд» запишите следующий программный код:
procedure TForm1.Button2Click(Sender: TObject);
begin
If RadioGroup1.ItemIndex=0
Then
// Передача команд на Web-сервер и получение ответа от сервера
begin
ldTCPClient1.Host:= Edit1.Text;
IdTCPClient1.Port:= StrToInt(Edit2.Text);
IdTCPClient1.Connect;
try
IdTCPClient1.SendCmd(‘GET /'.);
Memo1.Lines.Add(IdTCPClient1.CurrentReadBuffer);
finally
IdTCPClient1.Disconnect;
end;
end
else
// Передача команд на FТР-сервер и получение ответа от сервера
begin
IdTCPClient1.Host := Edit1.Text;
IdTCPClient1.Port:=StrToInt(Edit2.Text);
IdTCPClient1.Connect;
try
IdTCPClient1.SendCmd(‘USER anonymous');
IdTCPClient1.SendCmd('PASS');
IdTCPClientl.SendCmd(‘HELP');
Memo1.Lines.Add(IdTCPClient1.CurrentReadBuffer);
finally
IdTCPClient1.Disconnect;
end; end; end;.
Если выбран Web-сервер, то на сервер передается команда «GET/» — получение домашней страницы. При успешном выполнении команды в поле Memo1 выводится содержимое страницы.
Если выбран FТР-сервер, то на сервер передаются три команды:
«USER anonymous» - передача идентификатора пользователя;
«PASS» - передача пароля. В данном случае пароль не нужен;
«HELP» - запрос помощи.
При успешном выполнении команд в поле Memo1 выводится список команд, распознаваемых данным FTP-сервером.
6) Для события OnClick компонента RadioGroup1 запишите следующий программный код:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
If RadioGroup1.ItemIndex=0 then Edit2.Text:= '80'
Else Edit2.Text:='21'
end;.
Этот код анализирует выбранную радиокнопку и, если выбран Web-сервер, автоматически устанавливает номер порта - 80 (порт по умолчанию для Web-сервера). В противном случае устанавливается номер порта - 21 (порт по умолчанию для FTP-сервера).
7) Для события OnClick кнопки «Очистить окно вывода» запишите следующий программный код:
procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Clear;
end;.
8) Откомпилируйте созданное приложение.
9) Проверьте и исследуйте совместную работу клиентского и серверного приложений.
ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ
Дополните и исследуйте разработанное приложение возможностью передавать несколько сообщений на сервер.
Дополните и исследуйте разработанное приложение возможностью получать ответы от сервера.
ПРИМЕЧАНИЕ
Для выполнения данной работы должны быть запущены Web-сервер и FТР-сервер.
ЛИТЕРАТУРА
Киммел П. Создание приложений в Delphi /Пер с англ. М., Издательский дом «Вильямс», 2003. 640 с.
Фленов М. Е. Программирование в Delphi глазами хакера. СПб., БВХ-Петербург, 2005. 368 с.
КОНТРОЛЬНЫЕ ВОПРОСЫ
Перечислите основные свойства компонентов IdTCPClient и IdTCPServer.
Перечислите основные методы компонентов IdTCPClient и IdTCPServer.
Сравните возможности компонентов IdTCPClient и IdTCPServer с возможностями компонентов TCPClient и TCPServer, ClientSocket и ServerCSocket.
