Интернет программирование стр.159

? onPacketRecvd. Генерируется каждый раз, когда отдельный пакет принимается от удаленного сервера в рамках HTTP-транзакции. Так как подобных пакетов в рамках одной транзакции обычно пересылается немало, подобное событие позволяет достаточно легко организовать некоторый индикатор прогресса.

? onPacketsent. Возникает каждый раз, когда пакет данных пересылается удаленному серверу.

? onstatus. Генерируется каждый раз, когда удаленный сервер посылает очередное сообщение об изменении статуса.

Получение и передача файлов

Какие еще протоколы мы должны уметь использовать для создания полноценных приложений? На мой взгляд, следующим по популярности протоко лом после HTTP будет FTP (File Transfer Protocol, протокол передачи файлов). Протокол FTP применяется для передачи данных между сервером и удаленным пользователем, причем как в одну, так и в другую сторону. Неудивительно, что Delphi и здесь предоставляет нам компонент, реализующий FTP легко и достаточно прозрачно. Он называется NMFTP. Что необходимо для передачи файла? Указать удаленный FTP-сервер, имя файла и операцию, то есть загружать файл с сервера на удаленную машину или наоборот — передавать его на сервер. Что ж, для подобной операции нужно знать совсем немного.

Имя или IP-адрес сервера заносятся в свойство Host. Имеются также свойства Proxy, Port, UseiiD и Password, полностью аналогичные свойствам NMHTTP. После задания этих свойств уже можно вызывать метод Connect, устанавливающий соединение. Для загрузки файла с сервера на свою машину используется метод Download, в качестве параметров которому передаются строковые переменные, содержащие имя удаленного файла и имя принимающего файла. Если имя принимающего файла не указано, то на локальной машине принимаемый файл сохраняется с таким же именем, с которым он хранился на удаленном сервере.

К несчастью, каналы, которыми мы пользуемся, далеко не идеальны (и в обозримом будущем к этому состоянию и не приблизятся), поэтому соединения имеют тенденцию рваться. Чтобы не повторять загрузку файла с самого начала, используется метод DownioadRestore с теми же параметрами. Этот метод восстанавливает порванное соединение и производит дозагрузку указанного файла.

Небольшой комментарий по поводу Download и DownioadRestore. Прежде всего, перед их вызовом должен быть успешно выполнен метод Connect (в случае неудачной попытки соединения он возбуждает исключение, которое необходимо корректно обработать). А еще имейте в виду, что если файл на локальной машине, чье имя вы указываете в качестве принимающего файла, уже существует, то при выполнении загрузки он будет перезаписан без всяких дополнительных запросов.

Перед началом загрузки файла стоит указать режим работы, задаваемый с помощью метода Mode. В качестве параметра передается одна из двух констант: mode_ascii или mode_image. Первая константа применяется, если будет передаваться обычный ASCII-файл, а вторая — в случае необходимости передавать файл байт в байт. Можно использовать и режим mode_byte, при котором также передаются "сырые" данные без обработки, но при использовании этого метода длина одного байта может быть не равна восьми битам. Этот режим из-за своей специфики применяется очень редко.


⇐ вернуться назад| |читать дальше ⇒


*