Разработка приложений для Internet

Приложение ConsoleFtp


Создайте новый проект. Выберите из меню File строку New. На экране появится диалоговая панель New. Выберите из списка, расположенного в этой панели строку Project Workspace и нажмите кнопку OK. Откроется диалоговая панель New Project Workspace. В качестве типа создаваемого приложения укажите Console Application и введите в поле Name имя проекта - ConsoleFtp. Затем нажмите кнопку Create. Microsoft Visual C++ создаст новый проект.

Мы будем использовать для нашего приложения классы библиотеки MFC. Чтобы настроить проект соответствующим образом, вы должны выбрать из меню Build строку Settings. На экране откроется диалоговая панель Project Settings, содержащая различные настройки проекта. Откройте на этой диалоговой панели страницу General, выберите из списка Microsoft Foundations Classes строку Use MFC in a Shared DLL и нажмите кнопку OK.

По умолчанию, новый проект не содержит ни одного файла. Создайте новый текстовый файл. Для этого еще раз выберите из меню File строку New и в открывшейся панели New укажите тип текстового файла - Text File. Нажмите кнопку OK. Откроется окно текстового редактора. Наберите в нем текст приложения, представленный нами в листинге 2.1. Сохраните набранный текст в файле под именем ConsoleFtp.cpp, записав его в каталог проекта.

Затем выберите из меню Insert строку Files into Project. На экране появится диалоговая панель Insert Files into Project. Выберите из списка файлов в этой панели файл ConsoleFtp.cpp и нажмите кнопку Add. Файл ConsoleFtp.cpp будет добавлен к проекту.

Листинг 2.1. Файл ConsoleFtp.cpp

//============================================================

// Приложение ConsoleFtp. Выполняет соединение с заданным

// сервером FTP

//

// (C) Фролов Г.В., 1997

// E-mail: frolov@glas.apc.org

// WWW:    http://www.glasnet.ru/~frolov

//         или



//         http://www.dials.ccas.ru/frolov

//============================================================

// Включаемый файл для библиотеки MFC

#include <afx.h>

// Включаемый файл для классов WinInet


#include <afxinet.h>

// Включаемый файл для консольного ввода/вывода

#include <iostream.h>

// Включаемый файл для стандартных функций

#include <stdlib.h>

//============================================================

// Главная функция приложения

//============================================================

int main(int argc, char* argv[])

{

// Если приложение запущено без параметра, отображаем на

   // экране формат вызова приложения

   if (argc != 2)

   {

      cout << "Programm format: ConsoleFtp <URL>" << endl;

      cout << "  <URL> - URL address of FTP" << endl << endl;

      return -1;

   }

   // Записываем параметр, указанный при вызове приложения в

   // текстовую строку sUrlAdress. Он должен содержать URL

   // адрес сервера FTP

   CString sUrlAdress;

   sUrlAdress = argv[1];

  

   // Отображаем адрес сервера FTP на экране

   cout << "URL address: " << sUrlAdress << endl << endl;

   // Определяем переменные, в которые будут записаны

   // отдельные компоненты адреса, указанного пользователем

   // Имя сервера

   CString sServer;   

   // Имя объекта на который указывает адрес URL

   CString sObject;

   // Номер порта

   INTERNET_PORT nPort;

   // Тип сервиса или тип протокола

   DWORD dwServiceType;

  

   // Разбираем адрес URL, записанный в строке sUrlAdress

   if (!AfxParseURL(sUrlAdress, dwServiceType, sServer,

                    sObject, nPort))

   {

      // В случае ошибки выводим сообщение и завершаем

      // работу приложения

      cout << "AfxParseURL Error" << endl;

     

      return -1;

   }

   // Проверяем, соответствует ли указанный адрес URL

   // серверу FTP. Для этого тип сервиса должен быть ftp://

   if(dwServiceType != AFX_INET_SERVICE_FTP)

   {

      // Если адрес не соответствует серверу FTP выводим

      // соответствующее предупреждение и завершаем приложение



      cout << " URL Address not FTP server" << endl;

        

      return -1;

   }

   // Указатель на объект класса CInternetSession

   CInternetSession* m_InternetSession = NULL;

   // Инициализируем сеанс работы с WinInet - создаем объект

   // класса CInternetSession catch

   m_InternetSession = new CInternetSession("Connecter");  

     

   // Исключения, вызванные в этом блоке try обрабатываются

   // следующим блоком catch

   try

   {

      // Определяем указатель на объект класса CFtpConnection

      CFtpConnection*  m_FtpConnection = NULL;

        

      // Пытаемся соединииться с сервером sServer

      m_FtpConnection =

         m_InternetSession -> GetFtpConnection( sServer );

      // Выводим сообщение об успешном соединении

      cout << "Connect to FTP server established" << endl;

      // Закрываем соединение с сервером FTP

      m_FtpConnection -> Close();

      // Удаляем объект m_FtpConnection

      delete( m_FtpConnection );

   }

   // Так как исключение в блоке try может быть вызвано только

   // методом GetFtpConnection, достаточно определить

   // обработчик исключения класса CInternetException

   catch (CInternetException* pEx)

   {

      // Обрабатываем исключение CInternetException

      TCHAR szErr[1024];  // временный буфер для сообщения

      // Выводим сообщение об ошибке

      if (pEx->GetErrorMessage(szErr, 1024))

         cout << "Error: " << szErr << endl << endl;

      // Удаляем исключение

      pEx->Delete();

   }

   // Завершаем сеанс связи

   m_InternetSession -> Close();

   // Удаляем объект m_InternetSession

   delete(m_InternetSession);

   return 0;

}

Постройте проект. Вы получите исполнимый файл приложения ConsoleFtp.exe. Запустите его на выполнение из командной строки MS-DOS Prompt (закрывать Windows не надо). В качестве параметра укажите URL адрес сервера FTP с которым вы желаете соединиться. Чтобы приложение правильно восприняло этот адрес, на забудьте указать в нем тип сервиса ftp.



Например, в ответ на следующую команду, приложение ConsoleFtp будет пытаться выполнить соединение с сервером FTP корпорации Microsoft:

ConsoleFtp.exe ftp://ftp.microsoft.com

Если указанный сервер FTP доступен, приложение выведет на экран сообщение об успешном соединении и завершит свою работу. Ниже мы привели сообщение приложения ConsoleFtp о соединении с сервером ftp.microsoft.com:

URL address: ftp://ftp.microsoft.com

Connect to FTP server established

В некоторых случаях процесс соединения с сервером может занять значительное время, поэтому не торопитесь насильно прервать исполнение нашего приложения. Если сервер не будет обнаружен или произойдет какая-либо другая ошибка, приложение выведет на экран соответствующее сообщение:

URL address: ftp://failer

Error: The server name or address could not be resolved

В данном случае мы попытались установить соединение с сервером FTP по адресу ftp://failer, но такой сервер не был обнаружен.

Если вы желаете запустить приложение ConsoleFtp непосредственно из среды Microsoft Visual C++ или под отладкой, вы должны указать параметры для него в диалоговой панели Project Settings. Чтобы открыть эту панель выберите из меню Build строку Settings. Выберите в панели Project Settings страницу Debug (рис. 2.1), а затем из списка Category строку General.



Рис. 2.1. Диалоговая панель Project Settings, страница Debug

Теперь вы можете ввести аргументы для приложения в строке Program arguments. Когда вы запустите приложение из среды Microsoft Visual C++, ему будут переданы именно эти параметры.


Содержание раздела