![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программное обеспечение
Создание простого HTTP-клиента |
В этой статье будет написана программа, которая может считывать файлы из I er e по H P протоколу и записывать их на диск. Для связи с I er e в Visual C существует так называемый Wi I e Class. В него входят несколько подклассов. Далее представлены ксассы Wi I e : Классы Описание CI er e Sessio Создаёт I er e сессию. Все MFC Wi I e приложения должны создавать CI er e Sessio объект перед использрванием других Wi I e классов. CI er e Co ec io Создаёт коннект с I er e . Это базовый класс для классов CF pCo ec io , CGopherCo ec io , и CH pCo ec io . CF pCo ec io Устанавливает соединение по F P протоколу. CGopherCo ec io Создаёт Gopher коннект. CH pCo ec io Устанавливает соединение по H P протоколу. CI er e File Разрешает удалённый доступ к файлам на I er e серверах. Это базовый класс для классов CGopherFile a d CH pFile. CGopherFile Разрешает удалённый доступ к файлам на Gopher серверах. CH pFile Разрешает удалённый доступ к файлам на H P серверах. CFileFi d Разрешает поиск файлов в I er e . Это базовый класс для классов CF pFileFi d a d CGopherFileFi d. CF pFileFi d Разрешает поиск файлов на F P серверах. CGopherFileFi d Разрешает поиск файлов на Gopher серверах. CGopherLoca or Отыскивает Gopher устройство ввода позиций от gopher сервера. CI er e Excep io Управляет исключениями, сгенерированными Wi I e классом. Наша программа будет использовать четыре класса Wi I e : CI er e Sessio , CI er e File, CH pFile и CH pCo ec io Далее будут описаны методы( функции ) этих классов: Методы ( функции ) класса CI er e Sessio Функции Описание Close() Закрывает I er e сессию. E ableS a usCallback() Разрешает использование функции повторного вызова, которая используется для асинхронных действий. Ge Co ex () Получает значение контекста I er e сессии. Ge F pCo ec io () Устанавливает подключение по F P протоколу. Ge GopherCo ec io () Устанавливает подключение с Gopher серверами. Ge H pCo ec io () Устанавливает подключение по H P протоклолу. O S a usCallback() Модифицирует состояние операции. Ope URL() Соединяется с данным URL. QueryOp io () Сервис проверки ошибки провайдера. Service ypeFromHa dle() Получает тип сервиса от I er e дескриптора. Se Op io () Устанавливает опции I er e сессии. Методы ( функции ) класса CI er e File Функции Описание Abor () Закрывает файл и игнорирует все ошибки. Close() Закрывает файл. Flush() Сбрасывает файл на диск. Read() Счатывает байт из файла. ReadS ri g() Считывает строку символов из файла. Seek() Переустанавливает указатель внутри файла. Se ReadBufferSize() Устанавливает размер буфера для чтения. Se Wri eBufferSize() Устанавливает размер буфера для записи. Wri e() Записывает байт в файл. Wri eS ri g() Записывает строку с нулевым символом в конце в файл. Методы ( функции ) класса CH pFile Функции Описание AddReques Headers() Добавляет заголовок к H P запросу. Close() Закрывает CH pFile объект. Ge FileURL() Получает URL файла. Ge Objec () Получает объект по H P запросу. Ge Verb() Получает заголовок запроса. QueryI fo() Получает ответ или заголовок запроса. QueryI foS a usCode() Получает код состояния H P запроса.
Se dReques () Посылает H P запрос. Далее напишем код программы и разберём каждую строчку: . CS ri g m url = "mark5.dh p.kiae.ru"; // имя URL CS ri g m mes; // переменная в которой будут хранится сообщения char emp; // промежуточная переменная для перевода // данных из I в char CS ri g m pa h; // имя файла для записи char s rBody; // буфер из 1024 байт . i CH P Clie Dlg::O Bu o Co ec () { // создаём переменную sessio и открываем сессию A DY CI er e Sessio sessio ( ( "A DY" ), PRE CO FIG I ER E ACCESS ); // создаём переменную pServer класса CH pCo ec io CH pCo ec io pServer = ULL; // создаём переменную pFile класса CH pFile CH pFile pFile = ULL; / Обратите внимание, что все запросы к функциям членам Wi I e классов включены в блок программы RY. Это сделано так, потому что при соединении с каким либо URL есть риск неправильной ссылки, особенно, когда Вы полагаете, что пользователь сам печатает URL. Другая проблема - времена ожидания, которые возникают, когда требуемый URL в настоящее время неспособен обслужить подключение. Так же обработка Wi I e исключений, которые представлены в классе CI er e Excep io , является важной частью создания I er e приложения под MFC. / ry { CS ri g s rServer ame; // имя сервера CS ri g s rObjec ; // имя объекта I ER E POR Por ; // номер порта для связи DWORD dwService ype; // тип сервиса // функция AfxParseURL получает данные с указанного URL ( у нас m url ) об сервере, // объекте, типе сервиса и порте if ( AfxParseURL( m url, dwService ype, s rServer ame, s rObjec , Por ) == 0 ) { re ur 1; // выход из функции O Bu o Co ec () } // вывод данных о сервере m mes = ""; m mes = "Server ame = "; m mes = (CS ri g)s rServer ame; m mes = "r "; m mes = "Objec ame = "; m mes = (CS ri g)s rObjec ; m mes = "r "; m mes = "Por = "; i oa( Por , emp, 10 ); m mes = (CS ri g)& emp; m mes = "r "; Upda eDa a( FALSE ); // Устанавливаем подключение по H P протоклолу. pServer = sessio .Ge H pCo ec io ( s rServer ame, Por ); // посылаем запрос об объекте ( s rObjec ) pFile = pServer->Ope Reques ( CH pCo ec io ::H P VERB GE , s rObjec , ULL, 1, ULL, ULL, I ER E FLAG EXIS I G CO EC I ER E FLAG O AU O REDIREC ); // Добавляем заголовок к H P запросу pFile->AddReques Headers( ( "Accep : / r User-Age : A DYr " ) ); // посылаем запрос pFile->Se dReques ( ); DWORD dwRe ; // переменная для хранения кода состояния pFile->QueryI foS a usCode( dwRe ); // записываем код состояния в dwRe // вывод данных m mes = " he H P GE re ur ed a s a us code of "; i oa( dwRe , emp, 10 ); m mes = (CS ri g)& emp; m mes = "r "; CS ri g s rHeader; // переменная для хранения полученного заголовока запроса pFile->QueryI fo(H P QUERY RAW HEADERS CRLF, s rHeader); // записываем заголовок в s rHeader // вывод данных m mes = "Header = "; m mes = s rHeader; Upda eDa a( FALSE ); // если код состояния не равен 200, то выходим из функции if( dwRe != 200 ) { m mes = "Program ermi a e!"; Upda eDa a( FALSE ); re ur 1; } // // проверка выбора файла для записи m mes = "S ar i g dow load he file."; m mes = "r "; if( m pa h == "" ) { m mes = "Error! o file o save.
Choese he file."; m mes = "r "; Upda eDa a( FALSE ); re ur 1; } else { m mes = "File ame o save : "; m mes = m pa h; m mes = "r "; Upda eDa a( FALSE ); } CFile file2; // объявляем переменную file2 класса CFile // открываем файл для записи в двоичном формате ( CFile:: ypeBi ary ) !!! file2.Ope ((LPC S R)m pa h, i allRead = 0; // переменная для хранения общего числи считанных байт i Read = pFile->Read( s rBody, 1024 ); // считываем первые 1024 байта в буфер. // переменная Read хранит количество // считанных байт allRead = Read; // обновляем общее число считанных байт // вывод данных m mes = "Loadi g "; i oa( Read, emp, 10 ); m mes = (CS ri g)& emp; m mes = " by es"; m mes = "r "; Upda eDa a( FALSE ); // записываем буфер из Read байт в файл file2.Wri e( s rBody, Read ); // цикл считывания, пока Read не будет равняться нулю while ( Read > 0 ) { Read = pFile->Read( s rBody, 1024 ); if( Read != 0 ) { m mes = "Loadi g "; i oa( Read, emp, 10 ); m mes = (CS ri g)& emp; m mes = " by es"; m mes = "r "; file2.Wri e( s rBody, Read ); allRead = Read; Upda eDa a( FALSE ); } } // вывод данных m mes = "r "; m mes = " o al by es = "; i oa( allRead, emp, 10 ); m mes = & emp; m mes = "r "; Upda eDa a( FALSE ); file2.Close(); // закрываем файл pFile->Close(); // закрываем I er e файл pServer->Close(); // закрываем сервер m mes = "Dow load is comple e !!!"; m mes = "r ";Upda eDa a( FALSE ); } ca ch ( CI er e Excep io pEx ) { // Если произошла ошибка в Wi I e // вывод ошибки char szErr; pEx->Ge ErrorMessage( szErr, 1024 ); m mes = "Error: ( "; i oa( i (pEx->m dwError), emp ,10 ); m mes = (CS ri g)& emp; m mes = "r "; Upda eDa a( FALSE ); pEx->Dele e( ); // удаление переменной класса CI er e Excep io if ( pFile != ULL ) dele e pFile; // закрываем I er e файл if ( pServer != ULL ) dele e pServer; // закрываем сервер sessio .Close( ); // закрываем сессию re ur 1; } if ( pFile != ULL ) dele e pFile; // закрываем I er e файл if ( pServer != ULL ) dele e pServer; // закрываем сервер sessio .Close( ); // закрываем сессию re ur 0; } Ну вот и всё, приложение готово.
Детям Божьим необходимо твердо отстаивать и поддерживать принципы правды и стараться исправить вредные привычки тех, кто поклоняется в капище моды, разрушить чары, которыми сатана околдовал этих бедных людей. Светские люди должны увидеть разительный контраст между собственной расточительностью и простотой реформаторов, подражающих Христу. Секрет жизненного успеха - в добросовестном отношении к малому. Бог так же тщательно трудится над созданием простого листа, маленького цветка, ничтожной былинки, как и над созданием целой планеты. Сильный, красивый и уравновешенный характер складывается из добросовестного выполнения каждой обязанности. Всем братьям и сестрам нужно научиться быть верными как в малых, так и в больших делах. Их труд не выдержит Божественной проверки, если они не будут добросовестно, прилежно и бережно относиться к малому. Всем сотрудникам наших учреждений нужно ревниво оберегать Божье имущество, чтобы ничего не пропадало, даже если данный вопрос не входит в их компетенцию. Каждый может внести свой вклад в экономию ресурсов
1. Росписи Успенского собора Княгинина монастыря XVII века в г. Владимире. История создания памятника.
2. Патологические формы простейших и их биология
3. Чили: создание блока Народное единство и президентские выборы 1970 года
4. Создание топографического плана местности
5. Реорганизация прокуратуры и создание адвокатуры в России
9. Создание Единого экономического пространства
10. ООН: история создания и основные направления деятельности
11. Правовое регулирование договоров в сфере создания и передачи исключительных авторских прав
12. Творческий процесс создания фильма
13. Статуи острова Пасхи – свидетели достижений древних цивилизаций, или просто каменные идолы?..
15. Использование переносного значения слова для создания художественных тропов
16. Основные этапы создания государства на Украине
17. История создания Транссибирской магистрали
18. Создание и развитие Киевской Руси
19. Создание электронного обучающего комплекса по дисциплине "Инновационный менеджмент"
21. Создание фигурного текста посредством WordArt
26. Устройство ПЭВМ фирмы IBM. Периферийное оборудование. Назначение и история создания ПЭВМ
27. Особенности создания математических формул в Web
28. Расчетная работа по дисциплине "Информатика" (создание шаблона "Пояснительная записка")
29. Создание и описание базы данных "СТУДЕНТЫ" (Отчет по курсу "Базы данных")
30. Разработка лабораторного практикума "Создание тестирующей программы"
31. Создание игры
32. Возможности системы программирования Delphi для создания пользовательского интерфейса
33. Создание экспертных систем в среде EXSYS
34. Пример создания БД "Материалы" с помощью Access
36. WINDOWS - средства для создания презентаций
37. Создание и редактирование текстовых документов в текстовом процессоре word 9x
42. Создание и ведение Красных Книг - действенная форма сохранения биологического разнообразия
44. История создания сотовой связи
45. История создания и технология производства кирпича
47. Простой категорический силлогизм
48. Создание Службы занятости в России
50. Простой категорический силлогизм
51. История создания пластиковых карт. Мировой и Российский опыт
52. Стадии создания АС. Формирование требований к АС
53. Создание теории рынка Альфредом Маршаллом
57. Предпосылки создания и будущее новой европейской валюты - евро (Доклад)
58. Создание Единого экономического пространства
59. Организация создания и функционирования венчурных фирм в строительстве
60. Создание предприятия и определение его рыночной стратегии
61. Свободные экономические зоны: виды и цели создания
62. Создание схемы мотивации и стимулирование персонала на предприятии
63. Создание фермерского хозяйства или использование ресурсов земли
64. Создание фирмы
65. Роль местных властей в создании условий для устойчивого развития малого бизнеса
66. Экономическое обоснование развития или создания проекта
67. Создание собственного предприятия /бизнес-план/
68. Акционерные общества, создание, реорганизация, ликвидация
69. Оценка инвестиционной привлекательности предприятия для создания на его база совместного предприятия
73. Создание мануфактурной промышленности при Петре I
74. Значение и роль туризма в физическом воспитании, виды простейших туристических соревнований
75. Исламская революция и курс на создание армии нового типа
76. История создания и деятельности Ирландской Республиканской армии
77. Механизм создания фашисткой диктатуры в Германии
78. Коллегии, история создания и основы делопроизводства
79. Дебаты о создании системы ПРО в конгрессе США в 1995-1996 годах и российско-американские отношения
80. Военно-политический аспект создания океанского ВМФ
83. Создание термоядерного оружия в СССР: второй этап ядерной гонки
84. Создан для бури
85. Создание систем управления баллистическими ракетами подводных лодок
89. Создание программных продуктов для решения задач
90. Интернет - история создания
93. Специфика средств создания художественного образа в искусстве графики
94. История создания «Комеди Франсэз» и сценическое искусство Франции конца ХVII века
95. Употребление тире в простом и сложном предложении
96. Искусство создания характера
97. Характер героя и средства его создания в одном из произведений русской литературы XX века
98. "Я научилась просто, мудро жить…". (Философские мотивы лирики А.А.Ахматовой)
99. Мастерство Лермонтова в создании характера романтического героя