- •«Дальневосточный федеральный университет»
- •Школа естественных наук материалы практических занятий
- •Определение установок сетевого адаптера
- •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
1.2.8. Функция «Получить имя текущего Каталога на ftp-сервере» -FtpGetCurrentDirectory
function FtpGetCuircutDirectory(
hConnect: HINTERNET:
IpszCurrentDireetory: PChar;
var IpdwCurrenlDirectory: DWORD): BOOL; stdcall;,
где hConnect - дескриптор FTP-соединения (возвращаемый функцией InternetConnect);
IpszCurrentDireclory - адрес буфера, куда записывается строка, содержащая имя текущего каталога;
IpdwCurrentDirectory - длина буфера. Возвращаемое значение TRUE при успешном выполнении или FALSE в случае ошибки.
Примечание. Если буфер IpszCurrentDireclory имеет недостаточный размер, то в переменную IpdwCurrentDirectory записывается общая длина текущего каталога.
1.2.9. Функция чтения файла с http-сервера FtpGetFile
function FtpGetFile(
hConnect: HINTERNET;
IpszReinoteFile: PChar;
IpszNewFile: PChar;
fFaillfExists:BOOL:
dwFlagsAndAttributes: DWORD;
dwFlags: DWORD; dwContext: DWORD): BOOL, stdcall;,
где hConnect - дескриптор соединения (возвращаемый функцией InternetConnect);
IpszRemoteFile - адрес строки, заканчивающейся двоичным нулем, которая содержит имя удаленного файла;
IpszNewFile - адрес строки, заканчивающейся двоичным нулем, которая содержит имя локального файла, в который будет переписан файл с FТР-сервера;
fFaillfExists - флаг определяет, как будет выполняться функция, если локальный файл уже существует. Если локальный файл с таким именем уже существует и флаг fFaillfExists установлен в TRUE, то функция FtpGetFile выполняться не будет;
dwFiagsAndAttribtites - определяет атрибуты нового файла. Возможны любые комбинации флагов FILE_ATTRIBUTE_*, используемых функцией CreateFile;
dwFlags - флаги преобразования копируемого файла. Возможны следующие значения флагов;
INTERNET_FLAG_TRANSFER_ASCII - преобразование файла в ASCII,
INTERNET_ FLAG_TRANSFER _BINARY - преобразование файла в двоичный;
dwContext - обычно записывается 0. Возвращаемое значение TRUE при успешном выполнении или FALSE в случае ошибки.
2. Задание по практическому занятию
2.1. Создание клиентского приложения.
Создайте клиентское приложение, имеющее вид, показанный на рис. 1.
Рис.
1
Для чего на форму перенесите компоненты, перечисленные в табл.3.
Таблица 3
Компоненты приложения
Компонент |
Класс |
Описание |
Label1 |
TLabel |
Метка «Введите URL» для Web-сервера |
Label2 |
TLabel |
Метка «Введите адрес FТР-сервера» |
Label3 |
TLabel |
Метка «Управление Web-сервером» |
Label4 |
TLabel |
Метка «Управление FTP-сервером» |
Label5 |
TLabel |
Метка «Удаленный файл» |
Label6 |
TLabel |
Метка «Локальный файл» |
Label7 |
TLabel |
Метка «Наименование каталога» |
Memo1 |
TMemo |
Окно дня вывода прочитанного с Web-сервера файла |
Memo2 |
TMemo |
Окно для вывода прочитанного с FTP-сервера файла или каталога |
Edi1 |
TEdi 1 |
Окно ввода URL для Web-сервера |
Edi2 |
TEdi 1 |
Окно ввода имени FTP-сервера |
Edi3 |
TEdi 1 |
Окно ввода имени удаленного файла (файла наFTP-сервере) |
Edi4 |
TEdi 1 |
Окно ввода имени локального файла (файла на локальном компьютере, куда будет записываться файл, прочитанный с FTP-сервера) |
Edi5 |
TEdi 1 |
Окно ввода имени каталога на FTP-сервере |
Button1 |
TButton |
Кнопка «Установить соединение» с Web-сервером |
Button2 |
TButton |
Кнопка «Установить соединение» с РТР-сервером |
Button3 |
TButton |
Кнопка «Текущий катален » для вывода на экран содержимого текущего каталога FTP-сервера |
Button4 |
TButton |
Кнопка «Прочитать файл» с FTP-сервера |
Button5 |
TButton |
Кнопка «Вывод каталога» FTP- сервера |
Button6 |
TButton |
Кнопка «Очисти и окна» |
Button7 |
TButton |
Кнопка «Выход» |
Далее необходимо выполнить следующие действия:
1) Подключите библиотеку WinInet (сделайте ссылку на библиотеку в списке подключаемых модулей - uses):
uses
Windows, Messages, SysUtils, Variants, Classes. Graphics, Controls, Forms,
Dialogs, StdCtrls. WinInet;
2) В области глобальных переменных определите следующие дескрипторы:
Var
Form 1: TForm l;
hsession, hconnect, hfile: hInternet;
3) Для события OnCreale формы Form1 запишите следующий программный код:
Memo1.Clear;
Memo2.Clear;
// Имя файла, находящегося на Web-сервере
Edit 1 .Text := 'http://myself/www/index.html';
// Адрес FTP-сервера
Edit2.Text :='127.0.0.1';
// Имя файла, находящегося на FTP- сервере, который будет копироваться в локальный каталог
Edit 3.Text := 'fttp 1/Index.html';
// Имя локального файла, в который записывается файл,
// копируемый с FTP-сервера
Edit 4.Text:= 'C:\file.txt';
// Каталог' на FTP-сервере, содержимое которого выводится в окно Меmо2 Edit5.Text:= '/ftp1/*.*';
4) Для события OnClick кнопки «Установление соединения с WEB-сeрвером» запишите следующий программный код:
procedure TForm1 .Button1 Click(Sender: TObject);
VAR
url: Siring:
buf: Array[1..100] of char;
dwtotal: dword;
s: String;
k: Integer;
begin
url := Editl.Text;
If Pos(http://', Lowercase(url))=0 then (url):= 'http://'+url;
// Открытие сеанса связи
hSession := InternetOpen(nil,
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
If Assigned(hSession) then
begin
// Установление соединения по определенному URL
file :=intenetOpenUrlhSession, PChar(url),
nil, 0, INTERNET_FLAG_RELOAD, 0);
If Assigned(hfile) then
begin
// Чтение html-файла
internetReadFile(hfile, @buf, sizeof(buf), dwtotal);
s := String(buf);
memo 1 .Lines.Add(s);
// Закрытие соединения
InternetCloseHandle(hfile):
end:
// Завершение сеанса связи
InternetCloseHandle(hsession);
end;
end:
5) Для события OnClick кнопки «Установление соединения c FTP -сервером» запишите следующий программный код:
procedure TForm1 .Button2CTick(Sender: TObject);
VAR
url: String:
srvname: Array [1..100] of char;
begin
url := Edit2.Text;
StrPCopy(@srvname,url);
// Открытие сеанса связи
hSession := IntemetOpen(nil, INTERNET_OPBN_TYPE_PRECONFIG
nil, nil. 0);
If Assigned(hSession) then
begin
// Установление соединения с РТР-сервером для пользователя anonymous
// и при отсутствии пароля
connect := InternetConnect(hSession, @srvname, 21,
'anonymous', nil, INTERNET_SERVICE_FTP, 0, 0);
IF Assigned (connect) then
ShowMessage('Соединение с FTP-сервером установлено');
end;
end;
6) Для события OnCIick кнопки «Вывод каталога» запишите следующий программный код:
procedure TForm1 .Buttun5Click( Sender: TObject);
VAR
DirInfo: W1N32_FIND_ DATA;
hDir: hInternet;
DirList: Array [1.. 100] of char;
dwflag: DWORD;
result: Boolean;
begin
StrPCopy(@DirLis1. Edit5.Text);
// Найти первый файл по указанному шаблону
hDir := FtpFindFirstFile(hConnect, @DirList, DirInfo, dwFlag, 0);
// Обработка ошибок
if not Assigned(hdir) then
begin
if GetLastError()=ERROR_NO_MORE_FILES then
begin
ShovvMessage('B каталоге отсутствуют файлы');
InternetCloseHandle( hDir);
end
else
begin
ShowMessageFmt('Ошибка %d', [GetLastError ()]);
IntemetCloseHandle(hDir):
end;
end
else
begin
// Записать в поле Memo2 информацию об очередном найденном файле
memo2. Lines. Add(DirInfo.cFileName):
ifDirInfo.dwFileAttribules=FILE_ATTRIBUTE_DIRECTORY
then memo2.Lines.Add(DirInfo.cFileName+'<DlR>')
else memo2.Lines. Add(DirInfo.cFileName);
// В цикле ищутся все остальные файлы
repeat
result:= InternetFindNextFile (hDir, @DirInfo);
if not result then
if GetLastERROR()=ERROR_NO_MORE_FILES
Then InternetCloseHandle(hDir)
else
begin
ShowMessageFmt('Ошибка %d', [GetLastError ()]);
InternetCloseHandle(hDir);
end
else
begin
ifDirInfo.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY
then memo2.Lines.Add(DirInfo.cFiIeName+'<DIR>')
else memo2.Lines.Add(DirInfo.cFileName);
end;
until not result;
end;
end;.
ДОПОЛНИТЕЛЬНО ЗАДАНИЕ
1. Самостоятельно запрограммируйте событие OnClick кнопки «Текущий каталог», используя для этих целей функцию FtpGelCurrentDirectory.
2. Самостоятельно запрограммируйте событие OnClick кнопки «Прочитать файл», используя для этих целей функцию FtpGelFile.
3. Выполните чтение большого файла с Web-сервера при ограниченном размере буфера buf. В этом случае следует выполнить несколько последовательных чтений с Web-сервера. Признаком конца html-файла является тег </HTML>.
ЛИТЕРАТУРА
1. Грегори К. Использование Visual С++6. Специальное издание /Пер. с англ. М., Издательский дом «Вильяме», 1999. 864 с.
2. Озеров В. A. Delphi. Советы программистов. СПб., Символ-Плюс, 2004.976 е.
3. Джамса К., Коуп К. Программирование для INTERNET в среде Windows /Пер. с англ. СПб., Питер, 1996. 688 е.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Назначение и основные функции протокола FTP.
2. Назначение и основные функции протокола HTTP.
3. Основные команды протокола FTP.
4. Основные команды протокола HTTP.
5. Назначение команды FTP.EXE.
6. Из каких частей состоит и для чего используется URL?
