Автор: Пользователь скрыл имя, 11 Апреля 2011 в 17:46, курсовая работа
Техническое задание: разработать программу для обмена тестовыми сообщениями.
В настоящее время значительная часть программных продуктов написана на языке C++. Увеличение количества персональных ЭВМ в 80-90 гг. и вовлечение большого количества неквалифицированных пользователей в непосредственную работу на ЭВМ способствовало развитию операционных систем типа Windows. Эти операционные системы предполагают организацию процедур ввода-вывода не так как системы DOS.
1. Введение……………………………………………………………3
2. Инструментальное обеспечение для обмена текстовыми
сообщениями……………………………………………….……...4
3. Разработка архитектуры программы для обмена текстовыми
сообщениями…………………………...........................................5
4. Программная реализация сетевой технологии обмена
текстовыми сообщениями в программе ………………………...8
5. Результаты работы программы…………………………………...25
6. Преимущества и недостатки приложения……………………….27
7. Заключение………………………………………………………...28
8. Список литературы………………………………………………..29
GetClientRect(&
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1)
/ 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint()
}
}
// The Системные вызовы эта функция, чтобы получить курсор, чтобы показать, в то время как пользователь тянется
// минимизировать окно.
HCURSOR CChatCppDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
//////////////////////////////
// Запускаем сервер
void CChatCppDlg::
{
// Контроль несанкционированного запуска сервера:
// Если кнопка не в состоянии нажатой,
//
если сокет в
работе (т.е. только
с нулевым сокетом можно
начинать
// очень неудобно если в чате все будут под одинаковыми именами.
if(m_ButtonStartServer.
if(m_mainSocket.m_
if(QueryName() == false)
{
AfxMessageBox("
StopChat();
return;
}
CString strPort;
m_wndPort.GetWindowText(
// Класс CAsyncSocket упрощает процедуру создания сокета,
// вкладывая в функцию Create() непосредственное создание
// сокета и связывание его с одним из IP адресом доступном на компьютере.
// atoi конвертирует строку ansi to int
if(m_mainSocket.Create(
{
AfxMessageBox("
StopChat();
}
else
{
// Вводим сокет в режим прослушивания запросов на подключения.
if(m_mainSocket.
{
StopChat();
}
else
{
// Если все в порядке.
DisabledCont
SetWindowTex
// В чате только сервер.
m_
}
}
}
//////////////////////////////
//////////////////////////////
// Запускаем клиента
void CChatCppDlg::
{
// Контроль несанкционированного запуска клиента:
// Если кнопка не в состоянии нажатой,
// если сокет в работе (т.е. только с нулевым сокетом можно начинать работать),
// очень неудобно если в чате все будут под одинаковыми именами..
if(m_ButtonStartClient.
if(m_mainSocket.m_
if(QueryName() == false)
{
AfxMessageBox("
StopChat();
return;
}
// Класс CAsyncSocket упрощает процедуру создания сокета,
// вкладывая в функцию Create() непосредственное создание
// сокета и связывание его с одним из IP адресом доступном на компьютере.
if(m_mainSocket.Create() == TRUE)
{
CString strAddress;
m_wndIPAddress.
CString strPort;
m_wndPort.
if(m_mainSocket.
{
// В ассинхронном режиме код этой ошибки
// считается как ожидание события подключения,
// т.е. практически успешный возврат.
if(
{
Disabl
}
else
{
// Если какая-либо ошибка возникла,
// приводим приложение в первоначальное состояние,
// готовым к следующей попытке создания соединения.
StopCh
}
}
}
}
//////////////////////////////
//////////////////////////////
// Нажали кнопку "Выйти из чата".
void CChatCppDlg::
{
StopChat();
}
// Запрещает доступ к управлениям при работе
// приложения в режиме сервера или клиента.
// Цель запрета - избежать исключения от
// случайного нажатия "неправильных" кнопок.
void CChatCppDlg::DisabledControl(
{
// Запреты.
m_wndIPAddress.
m_wndPort.EnableWindow(
m_ButtonSend.
if(server == true)
{
m_ButtonStopChat.
m_
}
else
{
m_ButtonStopChat.
m_
}
// Разрешения.
// Разрешить возможность выхода из чата.
m_ButtonStopChat.
}
// Разрешить доступ к управлениям после закрытия сокетов.
// Цель запрета - избежать исключения от
// случайного нажатия "неправильных" кнопок.
void CChatCppDlg::EnabledControl(
{
// Разрешения.
m_wndIPAddress.
m_wndPort.EnableWindow(
m_ButtonStartClient.
m_ButtonStartServer.
// Запреты.
m_ButtonStopChat.
m_ButtonSend.
}
//////////////////////////////
//////////////////////////////
// Принимаем запросы на подключения
void CChatCppDlg::OnAccept(void)
{
CSock* pSock = new CSock;
pSock->m_pParent = this;
// Если все в порядке добавим рабочий сокет в список
// подключенных рабочих сокетов.
if(m_mainSocket.Accept(*
{
m_vecSockets.push_
m_ButtonSend.
SendCountPeople();
}
else
delete pSock;
SetWindowText("Сеть работает!");
}
//////////////////////////////
//////////////////////////////
// Выход из чата,
// если это сработало на стороне сервера,
// то это полная остановка чата.
// Для более надежной работы чата, во всех
// приложениях должны быть запущеня дублирующие серверы...
void CChatCppDlg::StopChat(void)
{
// Отсылаем сигнал об отключении от чата.
SendDisconnect();
m_mainSocket.Close();
for(int i = 0; i < (int)m_vecSockets.size(); i++)
{
m_vecSockets[i]->
delete m_vecSockets[i];
}
// Очистим вектор от ненужных элементов.
m_vecSockets.clear();
m_ButtonStartServer.
m_ButtonStartClient.
// Разрешим доступ к управлению для
// повторных попыток.
EnabledControl();
// В чате нет никого.
m_wndCountPeople.
SetWindowText("Нет сети!");
}
//////////////////////////////
Информация о работе Разработка программы для обмена тестовыми сообщениями