Федеральное агентство по образованию
ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Институт систем управления и информационной безопасности
Пояснительная записка к курсовому проекту
«Разработка почтового клиента для операционной системы 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: public CSocket
{
public:
pop3Socket(Cpop3ClientDlg* Dlg);
virtual ~pop3Socket();
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
virtual void OnSend(int nErrorCode);
char fl;
Cpop3ClientDlg* m_Dlg;
};
В секции public класса находятся следующие свойства и методы:
pop3Socket(Cpop3ClientDlg* Dlg) – конструктор класса. Данный конструктор перегружен в соответствии с логикой работы программы, для того чтобы позволить установить зависимость создаваемого сокета от диалогового окна.
virtual ~pop3Socket() – Виртуальный деструктор класса;
virtual void OnReceive(int nErrorCode) – виртуальный метод класса, вызывающийся при получени сокетом входного сообщения;
virtual void OnClose(int nErrorCode) – виртуальный метод класса, вызывающийся при закрытии сокета;
virtual void OnSend(int nErrorCode) – виртуальный метод класса, вызывающийся при отправки информации через сокет;
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 void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CListBox Protocol;
public:
afx_msg void OnBnClickedButton1();
public:
CButton connect_btn;
public:
CButton disconnect_btn;
public:
afx_msg void OnBnClickedButton2();
public:
afx_msg void OnBnClickedRadio1();
public:
bool simple;
public:
bool apop;
public:
bool auth;
public:
afx_msg void OnBnClickedRadio2();
public:
afx_msg void OnBnClickedRadio3();
};
Cpop3ClientDlg(CWnd* pParent = NULL) – стандартный конструктор, наследуемый от класса CDialog;
virtual void DoDataExchange(CDataExchange* pDX) – метод, реализующий механизм обмена данными DDX.
Методы, генерирующие сообщения:
virtual BOOL OnInitDialog(), afx_msg void OnSysCommand(UINT nID, LPARAM lParam), afx_msg void OnPaint(), afx_msg HCURSOR OnQueryDragIcon(), DECLARE_MESSAGE_MAP().
При разработке класса были созданы следующие методы и свойтсва:
CListBox Protocol – Компонент управления типа ClistBox, в который производится вывод строк протокола обмена между сервером и клиентом.
CButton connect_btn – переменная, связанная с кнопкой установки соединения с сервером
CButton disconnect_btn – переменная, связанная с кнопкойразрыва соединения с сервером
bool simple, apop, auth – логические переменные. Они устанавливаются в значение «true» в зависимости от того, какой тип аутентификации выбран пользователем.
afx_msg void OnBnClickedButton1() – метод, вызываемый принажатии на компонент Button1(кнопка соединения).
afx_msg void OnBnClickedButton2() – метод, вызываемый принажатии на компонент Button2(кнопка разрыва соединения).
afx_msg void OnBnClickedRadio1() – метод, вызываемый при нажатии на компонент RadioButton1 – простая аутентификация.
afx_msg void OnBnClickedRadio2() – метод, вызываемый при нажатии на компонент RadioButton1 – APOP аутентификация.
afx_msg void OnBnClickedRadio3() – метод, вызываемый при нажатии на компонент RadioButton1 – AUTH аутентификация.
Описание класса pop3ClientDlg содержится в файле pop3ClientDlg.h. Реализация класса содержится в файле pop3ClientDlg.cpp.
В ходе разработки проекта были модифицированы следующие методы класса: метод BOOL Cpop3ClientDlg::OnInitDialog() – в него добавлена инициализация свойств класса:
this->simple=false;
this->apop=false;
this->auth=false;
Основная часть кода программа содержится в методе void Cpop3ClientDlg::OnBnClickedButton1() – методе, который вызывается при нажатии пользователем на кнопку Button1.
1.2 Описание метода void Cpop3ClientDlg::OnBnClickedButton1()
Метод содержит следующие локальные переменные:
pop3Socket *pSocket – указатель на объект класса pop3Socket;
Cstring ip – строка типа Cstring, предназначенная для зранения ip адреса сервера
int port – целочисленная переменная для хранения номера порта сервера;
CString messtr – строка для хранения сформированного сообщения ответа клиента