Реферат по предмету "Информатика, программирование"


Разработка почтового клиента для операционной системы Windows

Федеральное агентство по образованию
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Институт систем управления и информационной безопасности
Пояснительная записка к курсовому проекту
«Разработка почтового клиента для операционнойсистемы Windows»
 
 
Пенза 2007
Реферат
СЕТЕВОЙ ПРОТОКОЛ, СОКЕТЫ, ЭЛЕКТРОННАЯ ПОЧТА, АУТЕНТИФИКАЦИЯ,СЕТЕВОЕ ПРОГРАММИРОВАНИЕ, ОПЕРАЦИОННАЯ СИСТЕМА WINDOWS
Объектом исследования в курсовом проекте является протоколприкладного уровня POP3. Данный протокол используется для обеспечения доступа пользователейсети к электронным сообщениям, хранящимся на сервере.
Целью курсового проекта является разработка приложения,реализующего работу с подмножеством протокола POP3. Приложение должно реализовыватьтри вида аутентификации, запрос статистики электронных сообщений у сервера иразрыв соединения. Приложение должно быть разработано для операционной системыWINDOWS. Для реализации должен быть использован язык программирования Си.Приложение должно иметь графический интерфейс.

Содержание
 
Реферат
Задание на курсовое проектирование
Введение
1. Описание программы
1.1 Описание класса pop3Socket
1.2 Описание класса pop3ClientDlg
1.3 Простая аутентификачия
1.4 APOP аутентификация
1.5 AUTH аутентификация
2. Описание реализации функций
2.1 Простая аутентификачия
2.2 APOP аутентификация
2.3 AUTH аутентификация
3. Руководство пользователя
Заключение
Список источников
Приложение А. Обязательное. Алгоритмыфункционирования программы
Введение
Post Office Protocol (POP) — протокол доставки почтыпользователю из почтового ящика почтового сервера РОР. Многие концепции,принципы и понятия протокола POP выглядят и функционируют подобно SMTP. КомандыPOP практически идентичны командам SMTP, отличаясь в некоторых деталях. Нарис.7 изображена модель клиент-сервер по протоколу POP. Сервер POP находитсямежду агентом пользователя и почтовыми ящиками.
В настоящее время существуют две версии протокола POP — РОР2и РОРЗ, обладающими примерно одинаковыми возможностями, однако несовместимымидруг с другом. Дело в том, что у РОР2 и РОРЗ разные номера портов протокола.Между ними отсутствует связь, аналогичная связи между SMTP и ESMTP. ПротоколРОРЗ не является расширением или модификацией РОР2 — это совершенно другойпротокол. РОР2 определен в документе RFC 937 (Post Office Protocol-Version 2,Butler, et al, 1985), a РОРЗ — в RFC 1225 (Post Office Protocol-Version 3,Rose, 1991). Далее кратко рассмотрим POP вообще и более подробно — РОРЗ. PОРЗразработан с учетом специфики доставки почты на персональные компьютеры и имеетсоответствующие операции для этого.
Ранее почтовые сообщения большинства сетей доставлялисьнепосредственно от одного компьютера к другому. И если пользователь часто менялрабочие компьютеры или один компьютер принадлежал нескольким пользователям, существовалиопределенные проблемы. В наши дни общепринята доставка сообщения не накомпьютеры пользователя, а в специальные почтовые ящики почтового сервераорганизации, который круглосуточно работает (включен).
Конструкция протокола РОРЗ обеспечивает возможность пользователюобратиться к своему почтовому серверу и изъять накопившуюся для него почту.Пользователь может получить доступ к РОР-серверу из любой точки доступа кИнтернет. При этом он должен запустить специальный почтовый агент (UA), работающийпо протоколу РОРЗ, и настроить его для работы со своим почтовым сервером. Итак,во главе модели POP находится отдельный персональный компьютер, работающийисключительно в качестве клиента почтовой системы (сервера). Подчеркнем также,что сообщения доставляются клиенту по протоколу POP, а посылаются по-прежнемупри помощи SMTP. То есть на компьютере пользователя существуют два отдельныхагента-интерфейса к почтовой системе — доставки (POP) и отправки (SMTP).Разработчики протокола РОРЗ называет такую ситуацию «раздельные агенты»(split UA). Концепция раздельных агентов кратко обсуждается в спецификацииРОРЗ.
1.  Впротоколе РОРЗ оговорены три стадии процесса получения почты: авторизация,транзакция и обновление. После того как сервер и клиент РОРЗ установилисоединение, начинается стадия авторизации. На стадии авторизации клиентидентифицирует себя для сервера. Если авторизация прошла успешно, сервероткрывает почтовый ящик клиента и начинается стадия транзакции. В ней клиентлибо запрашивает у сервера информацию (например, список почтовых сообщений),либо просит его совершить определенное действие (например, выдать почтовоесообщение. На стадии обновления сеанс связи заканчивается.

1.        Описаниепрограммы
В ходе выполнение курсового проекта была разработана,реализующая функции клиентского приложения, функционирующего по протоколу pop3.Программа была разработана в среде Microsoft Visual Studio 2005. Проектприложения имеет диалоговый тип. В ходе разработки приложения использованабиблиотека классов MFC. В частности был использован базовый класс CSocket, которыйявляется производным классом от CsynkSocket – класс синхронных сокетов.Использование механизма синхронных сокетов позволяет организовать упорядоченноефункционирование приложения, не используя дополнительных механизмов для синхронизации.Синхронный механизм не позволяет начать выполнение действия до того, как былополучено подтверждение о выполнении предыдущего.
В разработанном проекте был реализован класс pop3Socket,который является наследником класса CSocket.
В ходе реализации приложения использовался класс md5Capi,который содержит реализации хэш-функции MD5 с использованием библиотеки wincrypt.h
1.1 Описание класса pop3Socket
Разработанный класс имеет следующую структуру:
class pop3Socket: publicCSocket
{
public:
         pop3Socket(Cpop3ClientDlg*Dlg);
         virtual~pop3Socket();
         virtual voidOnReceive(int nErrorCode);
         virtual voidOnClose(int nErrorCode);
         virtual voidOnSend(int nErrorCode);
         char fl;
         Cpop3ClientDlg*m_Dlg;
};
В секции public класса находятся следующие свойства и методы:
pop3Socket(Cpop3ClientDlg* Dlg) – конструктор класса. Данныйконструктор перегружен в соответствии с логикой работы программы, для тогочтобы позволить установить зависимость создаваемого сокета от диалогового окна.
virtual ~pop3Socket() – Виртуальный деструктор класса;
virtual void OnReceive(int nErrorCode) – виртуальный методкласса, вызывающийся при получени сокетом входного сообщения;
virtual void OnClose(intnErrorCode) – виртуальный метод класса, вызывающийся при закрытии сокета;
virtual void OnSend(intnErrorCode) – виртуальный метод класса, вызывающийся при отправки информациичерез сокет;
char fl – свойствокласса, которое используется при анализе ответа сервера.
Cpop3ClientDlg* m_Dlg –свойство – указатель на диалоговое окно типа Cpop3ClientDlg (главное диалоговоеокно программы).
Определение класса приведено в файле pop3Socket.h проекта.
Реализация методов класса приведена в файле pop3Socket.сррпроекта.
В реализации класса был перегружен конструктор, которыйнастраивал указатель m_Dlg на адрес диалогового окна из которого происходитвызов конструктора.

1.2 Описание класса pop3ClientDlg
Класс pop3ClientDlg является наследником класса CDialog.
Класс имеет следующую структуру:
class Cpop3ClientDlg:public CDialog
{
public:
         Cpop3ClientDlg(CWnd*pParent = NULL);      // standard constructor
// Dialog Data
         enum { IDD =IDD_POP3CLIENT_DIALOG };
         protected:
         virtual voidDoDataExchange(CDataExchange* pDX);        // DDX/DDV support
// Implementation
protected:
         HICON m_hIcon;
         // Generatedmessage map functions
         virtual BOOLOnInitDialog();
         afx_msg voidOnSysCommand(UINT nID, LPARAM lParam);
         afx_msg voidOnPaint();
         afx_msg HCURSOROnQueryDragIcon();
         DECLARE_MESSAGE_MAP()
public:
         CListBoxProtocol;
public:
         afx_msg voidOnBnClickedButton1();
public:
         CButtonconnect_btn;
public:
         CButtondisconnect_btn;
public:
         afx_msg voidOnBnClickedButton2();
public:
         afx_msg voidOnBnClickedRadio1();
public:
         bool simple;
public:
         bool apop;
public:
         bool auth;
public:
         afx_msg voidOnBnClickedRadio2();
public:
         afx_msg voidOnBnClickedRadio3();
};
Cpop3ClientDlg(CWnd* pParent = NULL) – стандартныйконструктор, наследуемый от класса CDialog;
virtual void DoDataExchange(CDataExchange* pDX) – метод,реализующий механизм обмена данными DDX.
Методы, генерирующие сообщения:
 virtual BOOLOnInitDialog(), afx_msg void OnSysCommand(UINT nID, LPARAM lParam), afx_msgvoid OnPaint(), afx_msg HCURSOR OnQueryDragIcon(), DECLARE_MESSAGE_MAP().
При разработке классабыли созданы следующие методы и свойтсва:
CListBox Protocol –Компонент управления типа ClistBox, в который производится вывод строкпротокола обмена между сервером и клиентом.
CButton connect_btn –переменная, связанная с кнопкой установки соединения с сервером
CButton disconnect_btn –переменная, связанная с кнопкойразрыва соединения с сервером
bool simple, apop, auth –логические переменные. Они устанавливаются в значение «true» в зависимости оттого, какой тип аутентификации выбран пользователем.
afx_msg voidOnBnClickedButton1() – метод, вызываемый принажатии на компонент Button1(кнопкасоединения).
afx_msg voidOnBnClickedButton2() – метод, вызываемый принажатии на компонент Button2(кнопкаразрыва соединения).
afx_msg voidOnBnClickedRadio1() – метод, вызываемый при нажатии на компонент RadioButton1 –простая аутентификация.
afx_msg voidOnBnClickedRadio2() – метод, вызываемый при нажатии на компонент RadioButton1 –APOP аутентификация.
afx_msg voidOnBnClickedRadio3() – метод, вызываемый при нажатии на компонент RadioButton1 –AUTH аутентификация.
Описание классаpop3ClientDlg содержится в файле pop3ClientDlg.h. Реализация класса содержитсяв файле pop3ClientDlg.cpp.
В ходе разработки проектабыли модифицированы следующие методы класса: метод BOOLCpop3ClientDlg::OnInitDialog() – в него добавлена инициализация свойств класса:
this->simple=false;
this->apop=false;
this->auth=false;
Основная часть кодапрограмма содержится в методе void Cpop3ClientDlg::OnBnClickedButton1() –методе, который вызывается при нажатии пользователем на кнопку Button1.

1.2 Описание метода voidCpop3ClientDlg::OnBnClickedButton1()
Метод содержит следующиелокальные переменные:
pop3Socket *pSocket –указатель на объект класса pop3Socket;
Cstring ip – строка типаCstring, предназначенная для зранения ip адреса сервера
int port – целочисленнаяпеременная для хранения номера порта сервера;
CString messtr – строкадля хранения сформированного сообщения ответа клиента
CString pswd – строка дляхранения паролья прользователя;
CString login – строкадля хранения имени пользователя;
char * buf = new char[128] – массив для хранения принятов строки от сервера;
char fl=0 – переменнаядля анализа ответа сервера;
char * stamp = newchar[64] – строка для хранения временной метки сервера.
Метод вызывается при нажатиипользователем на кнопку соединения с сервером. Подразумевается, что на моментнажатия кнопки, пользователь ввел все необходимые для функционированияпрограммы данные, как то: имя, пароль, адрес, номер порта, тип аутентификации.Наличие полноты ввода этих данных проверяется программой и, в случае, есликакие-либо из них отсутствуют, программа выдает сообщение об ошибке в виде окнаAfxMessageBox.
Как только данный методвызывается, происходит считывание введенных данных в переменные с помощьюфункции GetDlgItemText. Параметрами данной функции являются идентификаторэлемента управления из которого считывается строка и переменная, в котороуюданные считываются.
GetDlgItemText(IDC_EDIT1,ip);- из строки ввода в переменную ip
GetDlgItemText(IDC_EDIT2,login);- из строки ввода имени пользователя в переменную login;
port = atoi(login); — спомощью функции atoi строка login преобразуется в целочисленное значение иприсваивается переменной port.
GetDlgItemText(IDC_EDIT3,login);- из строки ввода имени в строку login
GetDlgItemText(IDC_EDIT4,pswd);- из строки ввода пароля в строку pswd.
После этого производитсяпроверка того, что был выбран тип аутентификации, если ни один из типоваутентификации выбран не был, то происходит вызов диалогового окна с сообщениемоб ошибке.
Если проверка проёденауспешно, происходит создание сокета pSocket=new pop3Socket(this), и егоинициализация pSocket->Create().
Далее функционированиепрограммы осуществляется в зависимости от выбранного типа аутентификации. Дляэтого производится анализ переменных simple, apop и auth.
1.3  Простая аутентификачия
1.        Осуществляетсясоединение с сервером с помощью вызова методоа сокета pSocet:pSocket->Connect(ip,port), где в качестве параметров передаются строка,содержащая адрес сервера и номер порта Если соединение не установлено покаким-либо причинам, то производится вызов окна ошибки и завершение программы.
2.        Ожиданиеи получение строки ответа от сервера в массив и buf с помощью вызова методасокета pSocet->Receive(buf,0). В случае, если данные не были получены этотметод возвращает отрицательное число, в противном случае возвращает количествополученных байт. Количество байт, полученных от сервера присваиваетсяпеременной int recived.
3.        Производитсяформатирование с помощью метода строки messtr.Format() строки messtrmesstr.Format(«S: %s»,buf). Этот метод добавляет в начало строкисимвол последовательность “S: ” и далее содеримое массива buf.
4.        Производитсяывод строки messtr в ListBox с помощью вызова метода Protocol->Add(messtr).
5.        Вцикле от 0 до 127 элемента производится обнуление массива buf
6.        Спомощью вызова метода EnableWindow объекта disconect_btn с true в качествепараметра производится установка окна кнопки разрыва соединения с сервером вактивное сотояние.
7.        Спомощью вызова метода EnableWindow объекта conect_btn с false в качествепараметра производится установка окна кнопки соединения с сервером в неактивноестостояние.
8.        Еслиот сервера получен положительный ответ (проверяется по значению переменной fl:если она имеет значение «+», то ответ положителен, если «-», то отрицателен),тогда производится отправка ему строки с командой USER:
«pSocket->Send(«USER» + login + "\n\r",strlen(«USER „)+strlen(login) +strlen(“\n\r»),1)», если нет, то осуществляется переход к пункту 14
9.        Повторить2-7
10.      Повторитьп 8-9 (с командой PASS: pSocket->Send(«PASS » + pswd +"\n\r",strlen(«PASS»)+strlen(pswd)+strlen("\n\r"),0))
11.     Повторитьп 8-9 с командой STAT:
 pSocket->Send(«STAT\n\r»,strlen(«STAT\n\r»),0)
12.     Послатьсерверу команду QUIT:
 pSocket->Send(«QUIT\n\r»,strlen(«QUIT\n\r»),0)

1.4 APOP аутентификация
1.        Производитсяобъявление объекта md5Capi класса Cmd5Capi. Этот объект осуществляет вычислениехэш-функции MD5. Объявление переменных – CString out,in,test; int start,end;
2.        Еслисоединение с сервером установлено то 3, инчае вывод окна ошибки:
3.        Установкаокна кнопки соединения с сервером в неактивное сотояние
4.        Устанвкаокна кнопки разрыва соединения в активное стостояние
5.        Получениестроки ответа от сервера в массив и buf. Количество байт, полученных от сервераприсваивается переменной int recived.
6.        Формированиес помощью метода строки messtr.Forma() строки messtr messtr.Format(«S:%s»,buf)
7.        Поискв полученной от сервера строки приветствия уникальной метки.
8.        Выводстроки messtr в ListBox.
9.        Обнулениемассива buf
10.     Еслиот сервера получен положительный ответ, то 11, иначе 14
11.     ВычислениеMD5 хэша от строки вида: метка_сервера+пароль
12.     Отправкасерверу команды APOP:
out=«APOP » +login + " " + md5Capi.Digest(in)+"\n\r";
pSocket->Send(out,out.GetLength(),0)
13.     Еслиполучен положительный ответ, то отправка серверу команды STAT, иначе 14
14.     Отправкасерверу команды QUIT.        

1.5 AUTH аутентификация
1.        Еслисоединение с сервером установлено то 2, инчае вывод окна ошибки:
2.        Установкаокна кнопки соединения с сервером в неактивное сотояние
3.        Устанвкаокна кнопки разрыва соединения в активное стостояние
4.  Получениестроки ответа от сервера в массив и buf. Количество байт, полученных от сервераприсваивается переменной int recived.
5.  Формированиес помощью метода строки messtr.Forma() строки messtr messtr.Format(«S:%s»,buf)
6.  Поискв полученной от сервера строки приветствия уникальной метки.
7.  Выводстроки messtr в ListBox.
8.  Обнулениемассива buf
9.        Еслиот сервера получен положительный ответ, то 11, иначе 14
10.     ВычислениеMD5 хэша от метки сервера с паролем пользователя в качестве ключа.
11.     Отправкасерверу команды APOP:
out=«AUTH » +login + " " + md5Capi.Digest(in)+"\n\r";
pSocket->Send(out,out.GetLength(),0)
12.     Еслиполучен положительный ответ, то отправка серверу команды STAT, иначе 14
13.     Отправкасерверу команды QUIT.        
2. Описание алгоритма программы
Производится подключение к серверу. Если соединение не можетбыть установлено, то выдается соответствующее сообщение об ошибке и программазавершает свою работу. Если соединение с сервером установлено, то производитсявыбор ветки алгоритма, по которой пойдет выполнение программы. Она выбирается взависимости от выбранного пользователем типа аутентификации. В зависимости отэтого типа, программа выполняет соответствующую процедуру. Программаподдерживает три вида аутентификации: простая аутентификация, при которойпароль и имя пользователя передаются по каналу связи в незащищенном открытомвиде; аутентификация с использованием безключевой хэш-функции MD5, аутентификацияс использованием ключевой хэш-функции MD5. В случае, если пользователем выбрантип аутентификации – простая аутентификация, то производится переход кпроцедуре обработки этого типа аутентификации. В случае, если пользователемвыбран тип аутентификации с использованием хэш-функций MD5, то производитсяформирование строки, которая используется для вычисления хэш-функции ипроизводится переход к процедурам, обрабатывающим данные виды аутентификации.
 
2.1 Простая аутентификация
После подключения разрабатываемого клиентского приложения ксерверу и воду пользователем необходимых строк, серверу отправляется командаUSER с именем пользователя. После этого программа переходит в режим ожиданияответа сервера. После того как строка с ответом сервера приходит в сокетклиента, то эта строка сохраняется в соответствующий буфер, которыйиспользуется для хранения строк, содержащих команды протокола. После этогопроизводится проверка ответной строки сервера. Если строка ответа серверасодержит начальную подстроку –ERR, то значит ящика с данным именем на серверене существует. В данном случае серверу отправляется команда QUIT и производитсявыход из процедуры. Если же строка начинается с +ОК, то почтовый ящик с даннымименем существует на сервере и сервер ожидает пароля для доступа к нему. Далеепроизводится отправка серверу строки с командой PASS, содержащей парольпользователя для доступа к почтовому ящику. Далее программа опять переходит врежим ожидания ответа сервера и производится прием и анализ полученной от негостроки. Если строка содержит начальную подстроку +ОК, значит пароль, введенныйпользователем корректен, и сервер перешел в операционную фазу. Еслистрока-ответ сервера содержит подстроку –ERR, то серверу отправляется командаQUIT и производится выход из процедуры.
Если аутентификация успешно завершена, то алгоритм работыпрограммы переход в операционную фазу. На этой фазе функционирования программысерверу последовательно отсылаются команды STAT – для вывода статистики почтовогоящика пользователя и команда QUIT – для завершения соединения с сервером.
 
2.2 APOP аутентификация
Если пользователем был выбран тип аутентификации сиспользованием бесключевой хэш-функции MD5, то алгоритм программы переходит квыполнению данной процедуры. В данном виде аутентификации используется строка,которая была получена из основной части алгоритма. На втором шаге алгоритмафункции apop производится склеивание полученной строки метки времени сервера спаролем пользователя. После этого производится вычисление MD5 хэша от этой строки.После этого формируется строка для команды APOP. Эта строка имеет следующийвид: «APOP имя_пользователя хэш-функция». После того, как эта строкасформирована, она отправляется серверу. После этого программа переходит в состояниеожидания ответна от сервера. После получения строки с ответом серверапроизводится ее разбор. Если строка содержит начальную подстроку –ERR, то аутентификациие пройдена и производится отправка серверу строки с командой QUIT и выход изпрограммы. Если строка содержит начальную подстроку +OK, то значитаутентификация пройдена успешно и программа переходит в операционную фазу. Вэтой фазе серверу отсылается команда STAT и после этого команда QUIT. Послеэтого производится разрыв связи с сервером и завершение программы.
 
2.3 AUTH аутентификация (CRAM-MD5)
Вызов данной функции осуществляется в случае, еслипользователем был выбран вид аутентификации с использованием ключевой функцииMD5. Алгоритм функционирования данной функции практически полностью совпадает салгоритмом, описным в предыдущем пункте., за исключением того, что:
-        производится вычисление хэш-функции MD5 отуникальной метки, полученной от сервера мс использованием пароля, введенногопользователем.
-        Серверу отправляется строка вида «AUTHимя_пользователя хэш-функция»

3. Руководство пользователя
Разработаннаяпрограмма имеет графический интерфейс
/>
Рис.1 Интерфейс программы
После запуска программы пользователь должен указать адрессервера к которому он обращается, номер порта, имя пользователя, а так жепароль, после чего должен выбрать вид аутентификации:
-           простая
-           APOP
-           AUTH
После чего нажать клавишу “Подключиться”. При завершенииработы программы или выборе другой аутентификации необходимо нажать клавишу“Отключиться”.
Для выхода из программы необходимо нажать крестик или клавишу“Выход”.

Заключение
В результате выполнения работы была разработана программа,реализующая функции почтового клиента протокола POP3. Программа реализуетфункции авторизации, запроса статистики и завершения соединения. Программареализована на языке программирования Си для ОС WINDOWS и имеет графическийинтерфейс. Такимобразом, все требования задания выполнены в полном объеме.
Список использованныхисточников
1.        www.rsdn.ru
2.        www.codenet.ru
3.        www.firststeps.

Приложение А. Алгоритм функционирования программы
/>/>
Простая аутентификация

/>
Аутентификация с бесключевой хэш-функцией. Команда APOP

/>
Аутентификация с ключевой хэш-функцией CRAM-MD5. AUTH.

/>
Общий алгоритм


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.