Создание программы обмена текстовыми сообщениями через локальную сеть
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
Запуск сервера (OnBnClickedRadioServer - функция создания сервера);
)Используем запреты доступа (DisabledControl - запреты на ввод IP-адреса, порта и имени чатующего после создания сервера);
)Принимаем запросы на подключения (вызываем функцию OnAccept, при которой создаём сокет и добавляем его в список рабочих сокетов);
)Извлечение сообщения из сети (OnReceive - содержит информацию о имени чатующего, содержимое сообщения, времени и даты отправителя сообщения, тут же отсылка принятого севером сообщения в сеть другим клиентам, как зеркало, клиент может работать с другими клиентами в сети только через сервер);
)После формирования буфера текстового сообщения (функция SendChat), посылаем подготовленное сообщение в сеть (SendBuffer);
)Отправляем клиентам количество людей в чате (SendCountPeople);
)После окончания работы сервера останавливаем чат (StopChat).
На стороне клиента программный комплекс представлен следующими действиями:
)При активации клиента необходимо ввести имя пользователя (вызываем функцию QueryName - запрос имени чатующего перед созданием сокета);
)Запуск клиента (OnBnClickedRadioClient - функция создания сервера);
)Используем запреты доступа (DisabledControl - запреты на ввод IP-адреса, порта и имени чатующего после создания сервера);
)Активируем событие подключения (OnConnect);
)Отправляем подготовленное сообщение (OnBnClickedButtonSen):
)После окончания работы клиента выходим из чата (StopChat).
Программный комплекс сокета представлен следующими действами:
)Инициализация сокета;
)Подключение на стороне клиента (OnConnect);
)Инициализация возможности получения сообщений (OnReceive);
)Осуществление запроса на подключения, направляемого клиентом серверу(OnAccept).
Схема отправки сообщений представлена на рисунке 1.
Рисунок 1. Схема отправки сообщений
Разработанная программа содержит файлы:
ChatCppDlg.cpp - основной файл реализации функций, включающий класс диалогового окна.
Это главный файл проекта для VC C++. Проекты генерируется с использованием мастера приложений. Он содержит информацию о версии Visual C++, информацию о платформах, конфигурацию и особенность проекта..h - Основной включаемый файл приложения. В нем описан главный класс приложения, а также подключены другие включаемые файлы;.cpp - Основной файл приложения. В нем определены методы главного класса CChatCppApp приложения и глобальные объекты;.cpp - класс сокетов;.rc - Файл ресурсов. В этом файле описаны все ресурсы приложения.
Сами ресурсы могут быть записаны в каталоге RES, расположенном в главном каталоге проекта;\ChatCpp.ico - Файл иконки, который используется для прикладного окна;\ChatCpp.rc2 - В этом файле определены ресурсы, которые нельзя редактировать с помощью редактора ресурсов среды Visual C++..h - ключает информацию о структуре (имени чатующего, буфер сообщений, времени и дату получателя сообщения), устанавливает связь между диалоговым окном и программой;
Другие стандартные файлы:.h - Включаются заголовочные файлы, которые редко меняются.Или вообще никогда не меняются для данного проекта (те же stdio.h или windows.h). Чтобы откомпилировать один раз и забыть.
Сопутствующий файл - stdafx.cpp - обычно содержит только #include "stdafx.h". Он, собственно, и компилируется..h - Стандартный файл заголовка. Visual C++ читает и корректирует этот файл..manifest - Файл описывает тип платформы, версию, тип проекта и т.д..txt - Описание всех заголовочных файлов, файлов исходного кода, а так-же файлов ресурсов.
Листинг основного файла реализации:
// файл реализации
#include
#include
#include "stdafx.h"
#include "ChatCppDlg.h"
#include ".\chatcppdlg.h"
// CAboutDlg => класс диалогового окнаCAboutDlg : public CDialog
{:();
// связь с ABOUTBOX через индентификатор IDD{ IDD = IDD_ABOUTBOX };:void DoDataExchange(CDataExchange* pDX); //функция обмена данными
// реализация:_MESSAGE_MAP() // таблица откликов:_msg void OnBnClickedOk();
};::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}CAboutDlg::DoDataExchange(CDataExchange* pDX)
{::DoDataExchange(pDX);
}_MESSAGE_MAP(CAboutDlg, CDialog)_BN_CLICKED(IDOK, &CAboutDlg::OnBnClickedOk)_MESSAGE_MAP()
// CChatCppDlg реализация::CChatCppDlg(CWnd* pParent /*=NULL*/)
: CDialog(CChatCppDlg::IDD, pParent)
{_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}CChatCppDlg::DoDataExchange(CDataExchange* pDX)
{::DoDataExchange(pDX);_Control(pDX, IDC_RADIO_SERVER, m_ButtonStartServer); // Связывет объект сервера с контролом Server_Control(pDX, IDC_RADIO_CLIENT, m_ButtonStartClient);_Control(pDX, IDC_EDIT_NAME, m_wndName);_Control(pDX, IDC_EDIT_IP, m_wndIPAddress);_Control(pDX, IDC_EDIT_PORT, m_wndPort);_Control(pDX, IDC_EDIT_SEND, m_wndSend);_Control(pDX, IDC_BUTTON_SEND, m_ButtonSend);_Control(pDX, IDC_BUTTON_STOPCHAT, m_ButtonStopChat);_Control(pDX, IDC_EDIT_CHAT, m_wndChat);_Control(pDX, IDC_STATIC_COUNTPEOPLE, m_wndCountPeople);
}_MESSAGE_MAP(CChatCppDlg, CDialog)_WM_SYSCOMMAND() // будем обрабатывать системные события_WM_PAINT() //микрокоманды обновления клиентской области_WM_QUERYDRAGICON()_BN_CLICKED(IDC_RADIO_SERVER, OnBnClickedRadioServer) // макрокоманды вызова обработчика сообщений от кнопок_BN_CLICKED(IDC_RADIO_CLIENT, OnBnClickedRadioClient)_BN_CLICKED(IDC_BUTTON_STOPCHAT, OnBnClickedButtonStopchat)_BN_CLICKED(IDC_BUTTON_SEND, OnBnClickedButtonSend)_WM_CLOSE()_EN_CHANGE(IDC_EDIT_NAME, &CChatCppDlg::OnEnChangeEditName)_EN_CHANGE(IDC_EDIT_IP, &CChatCppDlg::OnEnChangeEditIp)_EN_CHANGE(IDC_EDIT_PORT, &CChatCppDlg::OnEnChangeEditPort)_EN_CHANGE(IDC_EDIT_SEND, &CChatCppDlg::OnEnChangeEditSend)_BN_CLICKED(IDC_STATIC_COUNTPEOPLE, &CChatCppDlg::OnBnClickedStaticCountpeople)_BN_CLICKED(IDC_BUTTON1, &CChatCppDlg::OnBnClickedButton1)_LBN_SELCHANGE(IDC_LIST1, &CChatCppDlg::OnLbnSelchangeList1)_MESSAGE_MAP()CChatCppDlg::OnInitDialog()
{::OnInitDialog();
// Необходимая инициализация("Нет сети!");_wndName.SetLimitText(12); // Ограничение количества вводимых символов._wndName.SetWindowText(g_EmptyName);_wndSend.SetLimitText(200); // Ограничение количества вводимых символов._wndIPAddress.SetWindowText("127.0.0.1"); // Адрес по умолчанию для тестирования._wndPort.SetWindowText("1500"); // Порт по умолчанию._ButtonStopChat.SetWindowText(g_strExitFromChat);_mainSocket.m_pParent = this;TRUE;
}CChatCppDlg::OnSysCommand(UINT nID, LPARAM lParam)
{((nID & 0xFFF0) == IDM_ABOUTBOX)
{dlgAbout;.DoModal();
}
{::OnSysCommand(nID, lParam);
}
}CChatCppDlg::OnPaint()
{(IsIconic())
{dc(this); //конте