Автор: Пользователь скрыл имя, 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
//////////////////////////////
// Отправка подготовленного сообщения.
void CChatCppDlg::
{
CString strChat;
m_wndSend.GetWindowText(
SendChat(strChat);
}
//////////////////////////////
//////////////////////////////
// Извлечение сообщений из сети чата.
void CChatCppDlg::OnReceive(void)
{
SENDBUFFER sb;
if(m_ButtonStartServer.
{
// Сервер несет большую нагрузку при получении сообщений.
for(int index = 0; index < (int)m_vecSockets.size(); index++)
{
m_
// Если кто-то отключился, удаляем этого клиента
// из списка доступных клиентов.
if(sb.
{
m_
delete m_vecSockets[index];
m_
SendCo
// Отсылка принятого севером сообщения в сеть другим клиентам,
// как зеркало, клиент может работать с другими клиентами в
// сети только через сервер.
SendBu
break;
}
// Рассылаем сообщения клиента по сети чата.
if(sb.
{
SendBu
break;
}
}
}
else
if(m_ButtonStartClient.
{
m_mainSocket.
}
// Обработка принятого сообщения на основе
// его типа.
switch(sb.typemessage)
{
case m_TypeMessage::tmCountPeople:
{
m_
IntToS
}
break;
case m_TypeMessage::tmChat:
{
CString strChat;
m_wndChat.
strChat += " " + CString(sb.name) + ": " + CString(sb.buffer) + "\r\n";
m_wndChat.
int number_line = m_wndChat.GetLineCount();
m_wndChat.
}
break;
case m_TypeMessage::tmDisconnect:
{
CString strChat;
m_wndChat.
// Если принято сообщение об остановки чата(отключении сервера),
// изменим содержимое сообщения.
if(sb.
{
StopCh
strCha
}
else
{
strCha
}
m_wndChat.
int number_line = m_wndChat.GetLineCount();
m_wndChat.
}
break;
default:
AfxMessageBox("
break;
}
}
//////////////////////////////
//////////////////////////////
// При закрытии приложения отправим в чат
// информацию об отключении чатующего.
void CChatCppDlg::OnClose()
{
StopChat();
CDialog::OnClose();
}
// Послать строку-сообщение в чат.
void CChatCppDlg::SendChat(CString strMessage)
{
SENDBUFFER sb;
int len = strMessage.GetLength();
memcpy(sb.buffer, strMessage.GetBuffer(), sizeof(TCHAR)*len);
m_wndName.GetWindowText(
len = strMessage.GetLength();
memcpy(sb.name, strMessage.GetBuffer(), sizeof(TCHAR)*len);
sb.typemessage
= m_TypeMessage::tmChat;
SendBuffer(sb, true);
}
// Послать буфер подготовленного сообщения в сеть.
void CChatCppDlg::SendBuffer(
{
// Если слкет не создан, нечего делать в этой функции.
if(m_mainSocket.m_
if(m_ButtonStartServer.
{
for(int i = 0; i < (int)m_vecSockets.size(); i++)
{
int send = m_vecSockets[i]->Send(&sb, sizeof(SENDBUFFER));
if(send == sizeof(SENDBUFFER))
{
m_
}
}
// Если непосредственно отправку осуществляет сервер,
// отобразим его сообщение в его же окне отправки,
// флаг toserver необходим поскольку данная функция
// может работать в режиме зеркала см. CChatCppDlg::OnReceive(void).
if(toserver == true )
{
if(sb.
{
CStrin
m_
strCha
m_
int number_line = m_wndChat.GetLineCount();
m_
}
if(sb.
{
CStrin
m_
strCha
m_
int number_line = m_wndChat.GetLineCount();
m_
}
}
}
else
if(m_ButtonStartClient.
{
int send = m_mainSocket.Send(&sb, sizeof(SENDBUFFER));
if(send == sizeof(SENDBUFFER))
m_wndSend.
}
}
// Формируем и отправляем сообщение об отключении от сети.
void CChatCppDlg::SendDisconnect(
{
SENDBUFFER sb;
CString s;
m_wndName.GetWindowText(
int len = s.GetLength();
memcpy(sb.name, s.GetBuffer(), sizeof(TCHAR)*len);
sb.typemessage
= m_TypeMessage::tmDisconnect;
//
Отсоединение сервера
if(m_ButtonStartServer.
sb.stopchat = true;
SendBuffer(sb,
true);
}
//////////////////////////////
//////////////////////////////
// Событие подключения, происходит на стороне клиента.
void CChatCppDlg::OnConnect(BOOL Error)
{
if(Error == TRUE)
{
AfxMessageBox("
StopChat();
}
else
{
m_ButtonSend.
SetWindowText("
}
}
//////////////////////////////
//////////////////////////////
// Сервер отправляет клиентам количество людей в чате.
void CChatCppDlg::SendCountPeople(
Информация о работе Разработка программы для обмена тестовыми сообщениями