- •«Дальневосточный федеральный университет»
- •Школа естественных наук материалы практических занятий
- •Определение установок сетевого адаптера
- •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.4. Функции Delphi для работы с файлами
1.4.1. Открытие и закрытие файла
Для доступа к файлам чаще всего используется специальная файловая переменная. Она связывается с указанным файлом процедурой AssignFile. Эта процедура имеет синтаксис:
procedure AssignFile(var F: File, S: string);,
где F - файловая переменная любого типа;
S - строка, содержащая имя файла.
Например, операторы
AssignFile(Fl, ' Test.txt');
AssignFile(F2,OpenDialogl.FileName);
связывают файловые переменные F1 и F2 соответственно с файлом «Test.txt» и с файлом, имя которого записано в свойстве FileName компонента - диалога OpenDialogl.
Открытие существующего файла осуществляется процедурой Reset, формат которой (кроме нетипизированнмх файлов) следующий:
procedure Reset(var F: File);.
Файловая переменная F перед обращением к этой процедуре должна быть связана с файлом.
Создание и открытие нового файла осуществляется процедурой Rewrite, формат которой (кроме негипизированных файлов) следующий:
procedure Rewrite(var F: File);.
После выполнения различных операций чтения и записи файл должен быть закрыт процедурой СloseFile:
procedure CloseFile(var F: File);.
При операциях ввода-вывода проверять окончание файла можно функцией Bof (F: File), возвращающей TRUE при достижении конца файла.
1.4.2. Типы файлов
Различают файлы трех видов:
текстовые;
типизированные;
• нетипизированные.
Текстовые файлы
Текстовые файлы состоят из последовательностей символов, разбитых на строки. В Objеct Pascal предопределен тип TextFile, соответствующий текстовому файлу. Таким образом, объявление файловой переменной может иметь вид
Vаr <имя файловой переменной>: TextFiie;.
Запись данных в текстовый файл осуществляется процедурой
procedure Write(var F: TextFile; <список выражений>);.
Выражения могут быть типов Char, Integer, Real, String, Boolean. При этом может использоваться форматирование.
Например, Write(F, 'Вам', 1, 'лет');.
Аналогичная процедура Writeln отличается от Write только тем, что после записи пишет символ перехода на новую строку, т. е. Writeln формирует одну строку. Чтение данных из текстового файла осуществляется последовательно от его начала процедурой
procedure Read(var F: TextFile; <список переменных>);,
в списке перечисляются переменные, в которые считываются данные из файла. Например, если определить переменные S1 и S2 как
var Sl,S2: string[4];,
то чтение строки, записанной в файл приведенным выше оператором, при открытии этого файла и использовании оператора
Read(F, S1, 1, S2);,
дает значение S1, равное «Вам », значение «1» равное записанному числу лет, и значение S2, равное «лет».
Аналогичная процедура Readln отличается от Read только чем, что после чтения переводит текущую позицию в файле на новую строку. Если в процедуре Readln не задан список переменных, то она просто пропускает текущую строку и переходит к следующей.
Файловый ввод-вывод с помощью компонентов
Однако в Delphi работа с текстовыми файлами может осуществляться и без непосредственного обращения к функциям Object Pascal. Для этого можно использовать методы LoadFromFile и SaveToFile, имеющиеся у классов TStrings и TStringList. Эти классы описывают списки строк и обладают множеством методов, позволяющих манипулировать строками.
Многие свойства компонентов имеют тип TStrings и, следовательно, в них можно загружать текстовые файлы. Например, прочитать текстовый файл, а также файл документа в формате RTF можно в компоненте RichEdit:
RichEditl.Lines.LoadFromFile('Test.rtf');.
После того, как пользователь что-то изменил в тексте, его можно сохранить в файле оператором
RichEdlitl.Lines.SaveToFile('Test.rtf');.
Формат, в котором сохраняется текст, определяется значением свойства PlainText компонента RichEdit. Если PlainText = false (что значение принято по умолчанию), то файл записывается в формате RTF. Если вам желательно сохранить файл в текстовом формате, то перед сохранением текста в файл надо установить PlainText в TRUE.
Аналогичным образом вы можете работать и с компонентом Memo, Только в этом случае нет необходимости думать о формате, так как Memo работает только с текстовым форматом.
Ваш вам не требуется отображать текст пользователю, а надо просто прочитать содержимое некоторого текстового файла, обработать текст и сохранить его в файле, вы можете сделать это, например, следующим образом. Объявите переменную списка строк типа TStringList, в которой будет храниться текст файла. В момент создания формы или в момент, когда вам надо прочитать файл, разместите в памяти эту переменную. Например:
var List: TStringList;
List := TStringList.Create;.
После этого можете читать в переменную List файл:
List.LoadFromFile('test.txt');.
Далее можете работать с этим текстом методами, свойственными типу TStringList: Add, Delete и т. п. В заключение можете сохранить измененный текст в файле и удалить из памяти уже ненужный список:
List.SaveToFile('test.txt');
List.Free;.
Через компоненты Delphi можно работать не только с текстовыми файлами, но и с файлами изображений и мультимедиа
Типизированные файлы
Типизированные файлы являются двоичными файлами, содержащими последовательность однотипных данных. Объявление файловых перeмeных таких файлов имеет вид
var <имя файловой переменной>: file of <тип переменной>;
Например:
var F: file of real;
Тип данных может быть не только простым типом, но и, например, типом записей. Так операторы:
type
PhoneEntry=reсord Fam, Nam: string[20];
PhoneNumber: string [15];
Listed: Boolean;
end;
Phone.List=file of PhoneEntry;
объявляют типизированный файл, содержащий записи телефонных номеров.
Процедуры чтения и записи Read и Write не отличаются от рассмотренных ранее для текстовых файлов. Только типы выражений при записи и переменных при чтении должны соответствовать объявленному типу данных файла. Процедур, аналогичных Readln и Writeln, для типизированных файлов нет. Зато есть процедура Seek, позволяющая перемещаться по файлу не только последовательно, как в текстовых файлах, но сразу переходить к требуемому элементу. Ее синтаксис:
procedure Seek(var F: File, N: Longint);.
где N – номер элемента. Эта процедура перемещает текущую позицию в файле на нужный элемент.
Имеется также функция FilePos:
function FilePos(var F): Longint;,
которая возвращает текущую позицию в файле.
Нетипизированные файлы
Нетипизированные файлы - это двоичные файлы, которые могут содержать самые различные данные в виде последовательности байтов. Программист при чтении этих данных сам должен разбираться, какие байты к чему относятся.
Тип файловой переменной нетипизированного файла объявляется следующим образом:
Var < имя файловой переменной>: file;.
Открытие нетипизированных фалов осуществляется теми же процедурами Reset и Rewrite, но их синтаксис несколько отличен от аналогичных процедур для других видов файлов:
procedure Rеset(var F: File; Recsize: Word);
procedure Rewrite(var F: File: Recsize: Word);.
В этих процедурах Recsize — необязательный параметр, который указывает размер одной записи в файле, (одного элемента файла) в байтах. Если параметр Recsize не задан, то размер одной записи предполагается равным 128 байтам.
Вместо процедур записи и чтения Read и Write в нетипизированных файлах имеются процедуры BlockRead и BlockWrite, объявленные следующим образом:
procedure BlockWrite (
var f: File;
var Buf; Count: Word;
[var Result: Word]);
procedure BlockRead (
var F: File;
var Buf; Count: Word;
[var Result: Word]);.
В этих процедурах:
Buf-любая переменная, содержимое которой записывается в файл или в которую читаются записи из файла;
Count - выражение типа Word, определяющее число записываемых или читаемых записей.
В необязательный параметр Result заносится число реально записанных или прочитанных записей. Это число может быть меньше или равно числу, указанному как Count. Недостаточное значение Result при чтении может, например, свидетельствовать, что конец файла достигнут ранее, чем прочиталось заданное число записей. А при записи это может означать, например, что диск переполнился.
