Автор работы: Пользователь скрыл имя, 19 Июня 2013 в 15:16, курсовая работа
Однако основной особенностью данных программ является обязательное подключение к серверу, что делает невозможным использование данных программ, например, в локальной вычислительной сети или просто между двумя компьютерами, без организации соответствующего сервера.
Используя современные средства визуальной разработки программного обеспечения, имеется возможность быстрого создания собственных программ по обмену сообщениями в локальной вычислительной сети. В данной курсовой работе рассматривается создание клиент-серверного приложения ЧАТ с помощью среды визуальной разработки приложений Borland C++ Builder версии 6.
Введение ………………………………………………………………………. .3
Глава 1. Цели и задачи разработки ……………………………………………4
1.1 Цели разработки…………………………………………………………….4
1.2 Задачи разработки…………………………………………………………...4
Глава 2. Назначение и область применения …………………………………..5
2.1 Назначение программы……………………………………………………..5
2.2 Область применения программы ………………………………………….5
2.3 Постановка задачи и разработка алгоритма работы приложения……. …5
Глава 3. Решение задачи с помощью программных средств………………….8
3.1 Выбор среды разработки…………………………………………………….8
3.2 Разработка серверной части…………………………………………………8
3.3 Разработка клиентской части………………………………………………16
Заключение………………………………………………………………………24
Список используемых источников……………………………………………..25
Приложение………………………………………………………………...……
void __fastcall TMainForm::
TCustomWinSocket *Socket)
{
// Заносим его в окно чата
SendForm->Memo_Chat->Lines->
}
При отключении клиента от сервера очищаем список клиентов.
// Если клиент отсоединился
void __fastcall TMainForm::
{
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
При завершении работы сервера, при закрытии программы, деактивируем сокеты 1 и 2.
// При завершении работы сервера (при закрытии программы)
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
}
Все вышеприведенные свойства компонент
и обработчики событий вводятся
непосредственно в среде
3.3 Разработка клиентской части
Создадим новый проект, на форме, разместим компоненты согласно рисунка 3.3.1.
Рис. 3.3.1 Внешний вид формы клиентской части приложения "Чат"
Значения свойств формы и свойств компонент, размещенных на форме приведены в таблице 3.3.1.
Табл. 3.3.1 Основные значения свойств формы и свойств компонент, размещенных на форме клиентской части приложения
Свойство |
Значение |
Окно формы TForm | |
Name |
MainForm |
Caption |
Чат: клиент |
Height |
300 |
Width |
210 |
TGroupBox | |
Name |
GroupBox_Options |
Caption |
Найстройки |
TLabel | |
Name |
Label_IPadress |
Caption |
IP-адрес сервера |
TEdit | |
Name |
Edit_IPadress |
Text |
127.0.0.1 |
TGroupBox | |
Name |
GroupBox_ClientMode |
Caption |
Режим работы |
TCombobox | |
Name |
ComboBox_ClientMode |
Items |
On-Line | Off-Line |
ItemIndex |
1 |
TGroupBox | |
Name |
GroupBox_ClientList |
Caption |
Список клиентов |
TListBox | |
Name |
ListBox_ClientList |
TClientSocket | |
Name |
ClientSocket1 |
Active |
False |
Address |
127.0.0.1 |
Port |
2000 |
ServerType |
stNonBlocking |
TClientSocket | |
Name |
ClientSocket2 |
Active |
False |
Address |
127.0.0.1 |
Port |
3000 |
ServerType |
stNonBlocking |
TStatusBar | |
Name |
StatusBar1 |
Panels |
0 - TStatusPanel |
Добавим форму к проекту, разместим компоненты согласно рисунка 3.3.2.
Рис. 3.3.2 Внешний вид формы клиентской части приложения Чат, предназначенной для отправки сообщений и приема файлов
Значения свойств формы и свойств компонент, размещенных на форме приведены в таблице 3.3.2.
Табл. 3.2.2 Основные значения свойств формы и свойств компонент, размещенных на форме, предназначенной для отправки сообщений и приема файлов
Свойство |
Значение |
Окно формы TForm | |
Name |
SendForm |
Caption |
Отправка-прием |
Height |
160 |
Width |
380 |
TMemo | |
Name |
Memo_Chat |
Lines |
пусто |
ReadOnly |
True |
TEdit | |
Name |
Edit_SendText |
Text |
пусто |
TButton | |
Name |
Button_SendText |
Caption |
Отправить текст |
TSaveDialog | |
Name |
SaveDialog1 |
Далее необходимо написать обработчики возможных событий, которые могут произойти во время работы клиентской части приложения "Чат", реализовать логику работы программы.
При запуске клиентской части программы "Чат" необходимо указать IP-адрес сервера и выбрать режим работы "On-Line" (рис. 3.3.3). Если сервер и клиент запускаются на одном и том же компьютере, то можно ввести в качестве IP-адреса – 127.0.0.1
Рис. 3.3.3 Окно клиентской части приложения после запуска
В Borland C++ Builder 6 для организации клиент-серверных приложений можно использовать такие компоненты как TServerSocket и TClientSocket. На клиенте будем использовать две компоненты TClientSocket – одну для обмена сообщениями, другую для обмена файлами.
После ввода параметров соединения и выбора режима работы "On-Line" обе компоненты TClientSocket активируются и пытаются подключиться к серверу. В случае удачного подключения к серверу, сервер добавляется в список клиентов. В режиме "Off-Line" обе компоненты TClientSocket деактивируются, и разрывают соединение с сервером.
// Выбор режима работы
void __fastcall TMainForm::ComboBox_
{
// Если On-Line
if (ComboBox_ClientMode->
{
// Присваиваем IP-адрес сервера свойству Address сокета 1
ClientSocket1->Address = Edit_IPadress->Text;
ClientSocket1->Active = True; // соединяемся с сервером
// Присваиваем IP-адрес сервера свойству Address сокета 2
ClientSocket2->Address = Edit_IPadress->Text;
ClientSocket2->Active = True; // соединяемся с сервером
// В строке состояния (внизу) программы пишем "Работаем"
StatusBar1->Panels->Items[0]->
// В список клиентов добавляем "Сервер"
ListBox_ClientList->Items->
}
// Если Off-Line
if (ComboBox_ClientMode->
{
ClientSocket1->Active = False;//Деактивируем
ClientSocket2->Active = False;//Деактивируем соединение сокета 2
// В строке состояния программы пишем "Не работаем"
StatusBar1->Panels->Items[0]->
// Очищаем список клиентов
ListBox_ClientList->Clear();
}
}
Если произошла ошибка соединения с сервером, то в строке состояния сообщаем об этом. Также переводим клиента в режим "Off-line" и очищаем список клиентов.
// Если произошла ошибка
void __fastcall TMainForm::ClientSocket1Error(
TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
ErrorCode = 0;
// В строке состояния пишем "Ошибка соединения"
StatusBar1->Panels->Items[0]->
// В списке режимов работы выбираем "Off-Line"
ComboBox_ClientMode->ItemIndex = 1;
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
В случае удачного подключения к серверу можно начинать отправку сообщений и прием файлов. Для этого нужно сделать двойной щелчок мышью на имени сервера в списке клиентов. После чего откроется окно "Отправка-прием" (рис. 3.3.4).
Обработчик события при щелчке на имени сервера в списке клиентов следующий.
// Для отправки сообщения
// строчку "Сервер"
void __fastcall TMainForm::ListBox_
{
SendForm->ShowModal(); // Показываем форму для отправки сообщений
}
Рис. 3.3.4 Основное окно клиента и окно "Отправка-прием"
Текст набираем в поле ввода, после чего нажимаем на кнопку "Отправить текст". Обработчик события для этой кнопки следующий.
// При нажатии на кнопку "Отправить текст"
void __fastcall TSendForm::Button_
{
// Добавляем отправляемый текст в окно чата
Memo_Chat->Lines->Add("Клиент: "+Edit_SendText->Text);
// Отправляем текст серверу
MainForm->ClientSocket1->
Edit_SendText->Text);
// Очищаем поле ввода текста
Edit_SendText->Text = "";
}
Для приема файла служит компонента ClientSocket2. При получении файла от сервера выполняется следующий обработчик события.
// Прием файла
void __fastcall TMainForm::ClientSocket2Read(
TCustomWinSocket *Socket)
{
ShowMessage("Принимается файл...");
//Открывается диалог сохранения файла
if (SendForm->SaveDialog1->
{
//Если указали имя файла при сохранении файла
if (SendForm->SaveDialog1->
{
Pointer buff; // объявляем буфер
int iLen; // указываем длину буфера
// Создаем файл
TFileStream* f2=new TFileStream(SendForm->
// уточняем размер данных, полученных от сервера
iLen = ClientSocket2->Socket->
// выделяем память для буфера
buff = GetMemory(iLen);
//копируем буфер сокета в буфер buff
ClientSocket2->Socket->
//передаем данные из буфера buff в файл
f2->Write(buff,iLen);
f2->Free();
// добавляем в окно чата
SendForm->Memo_Chat->Lines->
}
}
}
При получении сообщения от сервера добавляем его в окно чата, расположенное на форме "Отправка-прием".
// При получении сообщения от сервера добавляем его в окно чата
void __fastcall TMainForm::ClientSocket1Read(
TCustomWinSocket *Socket)
{
SendForm->Memo_Chat->Lines->
}
При отключении клиента от сервера выбираем в списке режимов режим "Off-Line", в строке состояния программы указываем "Не работаем", очищаем список клиентов.
// При отсоединении от сервера
void __fastcall TMainForm::
TCustomWinSocket *Socket)
{
// В списке режимов работы указываем "Off-Line"
ComboBox_ClientMode->ItemIndex = 1;
// В строке состояния программы пишем "Не работаем"
StatusBar1->Panels->Items[0]->
// Очищаем список клиентов
ListBox_ClientList->Clear();
}
При завершении работы клиента, при закрытии программы, деактивируем сокеты 1 и 2.
// В случае закрытия программы
разрываем соединение с
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
ClientSocket1->Active = False; // Деактивируем соединение сокета 1
ClientSocket2->Active = False; // Деактивируем соединение сокета 2
}
Все вышеприведенные свойства компонент
и обработчики событий вводятся
непосредственно в среде
Заключение
В данной работе необходимо было разработать
клиент-серверное приложение "Чат"
с возможностью файлового обмена.
Для разработки приложение использовалась
интегрированная среда
В ходе проектирования приложения было принято решение о реализации приложения в виде двух программ – клиентской и серверной части. Был разработан примерный алгоритм работы каждой из частей.
Заключительным этапом явилась непосредственная реализация серверной и клиентской части в среде разработки программного обеспечения Borland C++ Builder 6. Полученный программный продукт работоспособен, имеет необходимую функциональность – возможность передачи текста и файлов между двумя компьютерами, подключенными к локальной вычислительной сети. Отправка файлов реализована на стороне сервера, прием – на стороне клиента. Отправка и прием текстовых сообщений реализованы как на стороне сервера, так и на стороне клиента.
Приложения
//----------------------------
#include <vcl.h>
#pragma hdrstop
#include "UMainForm.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//----------------------------
__fastcall TMainForm::TMainForm(
: TForm(Owner)
{
}
//----------------------------
// Выбор режима работы
void __fastcall TMainForm::ComboBox_
{
// Если On-Line, то:
if (ComboBox_ServerMode->
{
ServerSocket1->Active = True; // активируем ServerSocket1
ServerSocket2->Active = True; // активируем ServerSocket2
// В строке состояния (внизу программы) пишем "Работаем"
StatusBar1->Panels->Items[0]->
}
// Если Off-Line, то деактивируем ServerSocket1 и ServerSocket2
if (ComboBox_ServerMode->
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
// В строке состояния (внизу программы) пишем "Не работаем"
StatusBar1->Panels->Items[0]->
ListBox_ClientList->Clear(); // Очищаем список клиентов
}
}
//----------------------------
// При завершении работы сервера (при закрытии программы)
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
ServerSocket1->Active = False; // деактивируем ServerSocket1
ServerSocket2->Active = False; // деактивируем ServerSocket2
}
//----------------------------
// Когда клиент подсоединился
Информация о работе Решение задачи с помощью программных средств