Создание программы обмена текстовыми сообщениями через локальную сеть

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



Запуск сервера (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); //конте