Программирование >>  Формирование пользовательского контейнера 

1 ... 61 62 63 [ 64 ] 65 66 67 ... 156


Библиотека WinlNet

Для доступа к Интернету в этой главе применяется простая в употреблении библиотека, предоставляемая Windows. Она называется Windows Internet или WinlN.i для краткости. Библиотека содержит богатый ассортимент высокоуровневых API-функций, обрабатывающих различные протоколы, такие как HTTP и FTP, непротиворечивым и устойчивым способом. Низкоуровневые подробности взаимодействия обеспечивает система Windows (подобно тому как <fstreain> предоставляет вам согласованный интерфейс для файловых операций, выполняя обработку деталей). Как вы увидите, добавить доступ в Интернет в любое Windows-приложение очень легко, если следовать нескольким правилам.

Несмотря но то, что WinlNet - большая библиотека, вам потребуется всего несколько ее функций, приведенных в табл. 5.1.

Каждая из перечисленных функций будет подробно описана при обсуждении кода зафузчика файлов.

Для использования библиотеки WinlNet вам следует включить в свою профамму заголовочный файл wininet.li и связать библиотеку wininet.lib с вашим приложением.

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

После разработки подсистемы зафузки будут созданы два приложения, которые используют ее. Первое, очень простое консольное приложение, которое иллюстрирует работу зафузчика. Второе - приложение, основанное на интерфейсе GUI (Graphics User interface. Графический интерфейс пользователя), вы сможете применять для зафузки файлов из Интернета. Поскольку взаимодействие с Интернетом обеспечивается операционной системой, необходимо остановиться на какой-либо конкретной системе. Windows - операционная система, доступная практически для всех читателей этой книги, поэтому именно она используется в данной главе. Тем не менее, основные технические приемы можно адаптировать и для другой исполняющей среды.

Примечание

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



1Г 5.1. Подсистема загрузки файлов из Интернета

#include <iostream>

#include <windows.h>

#include <wininet.h>

♦include <fstream>

♦include <cstdio>

using namespace std;

const int MAX EREMSG SIZE = 80; const int MAX FILENAME SIZE = 512; const int BUF SIZE = 1024;

11 Класс исключений для ошибок загрузки. Class DLExc {

char err[MAX ERiyG SIZE] ; Public:

DLExc(char *exc) {

if{strlen{exc) < MAX ERRMSG SIZE) s trcpy{err, exc);

Таблица 5.1. Список используемых API-функций из библиотеки WinlNet Название функции Назначение

interne t At temp tConnect Проверяет, возможно ли соединение с Интернетом

jnternetopen Устанавливает интернет-соединение и возвращает

его дескриптор (handle)

internetopenurl Открывает URL и возвращает его дескриптор

HttpQueryinf о Получает данные из заголовка последнего ответа

internetReadFile Считывает байты из открытого URL

internetCloseHandle Закрывает дескриптор интернет-соединения

Подсистема загрузки файлов из Интернета

в листинге 5.1 приведен полный код ззфузчика файлов из Интернета. Поместите этот код в файл с именем dl.cpp.



Возвращает указатель на сообщение об ошибке, const char * geterr О return err;

Класс для загрузки файлов из Интернета, class Download {

static bool ishttp{char *url);

static bool httpverOK{HINTERNET hlurl); *

static bool getfname(char *url, char *fname); static unsigned long openfile{char *url, bool reload, ofstream &fout);

public:

static bool download(char *url, bool restart=false, void ( update)(unsigned long, unsigned long)=NULL);

Загружает файл.

Передает URL файла параметру url.

Для дозагрузки файла передает true параметру reload.

Для определения функции update, которая вызьюается после того,

как очередной раз считан буфер, передает указатель

на эту.функцию как третий параметр. Если функция update

не нужна, оставляет текущее значение

третьего параметра, равное null.

bool Download::download(char *url. bool reload.

void {*update)(unsigned long, unsigned long)) {

ofstream fout; выходной поток

unsigned char buf[BUF SIZE]; входной буфер unsigned long numrcved; количество считанных байтов unsigned long filelen; длина файла на диске HINTERNET hlurl, hinet; интернет-дескрипторы



1 ... 61 62 63 [ 64 ] 65 66 67 ... 156

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика