Клиент-серверное приложение "Чат" с поддержкой файлового обмена

Создание клиент-серверного приложения "Чат" с помощью среды визуальной разработки приложений Borland C++ Builder версии 6. Описание функциональности приложения: наличие клиент-серверной архитектуры, обмен короткими сообщениями, а также передача файлов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 30.01.2012
Размер файла 302,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение

Высшего профессионального образования

«Владимирский государственный университет имени Александра Григориевича и Николая Григориевича Столетовых»

Кафедра информационных технологий

Пояснительная записка к курсовому проекту

по дисциплине: «Сети ЭВМ и телекоммуникации»

Клиент-серверное приложение "Чат" с поддержкой файлового обмена

Выполнил: ст.гр. ЗЭВМ-107

Захарова Т. В.

Принял: Куликов К. В.

Владимир 2012

Содержание

  • Введение
  • 1. Цели и задачи разработки
    • 1.1 Цели разработки
    • 1.2 Задачи разработки
  • 2. Назначение и область применения
    • 2.1 Назначение программы
    • 2.2 Область применения программы
  • 3. Постановка задачи и разработка алгоритма работы приложения
  • 4. Решение задачи с помощью программных средств
    • 4.1 Выбор среды разработки
    • 4.2 Разработка серверной части
    • 4.3 Разработка клиентской части
  • Заключение
  • Список используемых источников
  • Приложение
  • Введение
  • Развитие информационных технологий в настоящее время идет все быстрее и быстрее. Разработано множество стандартов, протоколов, форматов по хранению и передаче информации между компьютерами. В настоящее время существует большое количество программ для обмена данными между компьютерами. Особую роль среди них занимают программы обмена сообщениями. Многие из этих программ уже настолько развиты, что имеют возможность обмена файлами, передачи голоса и видео.
  • Однако основной особенностью данных программ является обязательное подключение к серверу, что делает невозможным использование данных программ, например, в локальной вычислительной сети или просто между двумя компьютерами, без организации соответствующего сервера.
  • Используя современные средства визуальной разработки программного обеспечения, имеется возможность быстрого создания собственных программ по обмену сообщениями в локальной вычислительной сети. В данной курсовой работе рассматривается создание клиент-серверного приложения ЧАТ с помощью среды визуальной разработки приложений Borland C++ Builder версии 6.

1. Цели и задачи разработки

1.1 Цели разработки

Разработать клиент-серверное приложение "Чат" с поддержкой файлового обмена.

1.2 Задачи разработки

Разработать клиент-серверное приложение "Чат" с поддержкой файлового обмена со следующей функциональностью:

- наличие клиент-серверной архитектуры;

- обмен короткими сообщениями;

- передача файлов.

2. Назначение и область применения

2.1 Назначение программы

Назначение программы "Клиент-серверное приложение "Чат" с поддержкой файлового обмена" заключается в организации соединения между несколькими компьютерами для создания между ними обмена короткими сообщениями и файлами.

2.2 Область применения программы

Программу "Клиент-серверное приложение "Чат" с поддержкой файлового обмена" можно использовать в локально-вычислительных сетях на компьютерах под управлением операционной системы Windows.

3. Постановка задачи и разработка алгоритма работы приложения

Необходимо разработать клиент-серверное приложение "Чат" с поддержкой файлового обмена. Приложение должно включать клиентскую и серверную части. Функциональность приложения должна содержать возможность передачи текста и файлов между клиентом и сервером.

Опишем примерный алгоритм работы приложения. Приложение состоит из серверной и клиентской части, в дальнейшем - сервер и клиент. Сервер в рабочем состоянии постоянно находится в состоянии готовности принять соединение от клиента. Клиент инициализирует соединение. После успешного соединения клиент и сервер могут отправлять друг другу текст. Отправка файлов реализована на стороне сервера, прием файлов - на стороне клиента. Разорвать соединение могут как клиент, так и сервер. Алгоритм работы приложения схематично представлен в виде блок-схем, изображенных на рис. 3.1 и 3.2.

Рис. 3.1 Алгоритм работы серверной части приложения

Рис. 3.2 Алгоритм работы клиентской части приложения

4. Решение задачи с помощью программных средств

4.1 Выбор среды разработки

Для решения задачи используем интегрированную среду визуальной разработки программ - Borland C++ Builder 6. Ее основные преимущества - гибкость языка C++, наличие визуального редактора форм, набор компонент с богатыми функциональными возможностями.

Определенную часть работы при программировании в Borland C++ Builder 6 занимает построение пользовательского интерфейса программы. Для этого используется редактор форм и набор визуальных компонент. Размещая компоненты на форме и редактируя их свойства, например, высоту, ширину, текст, мы получим в итоге заготовку программы с тем внешним видом, с которым и будет в дальнейшем работать пользователь.

Компоненты Borland C++ Builder 6 с точки зрения объектно-ориентированного программирования являются объектами. Работа с ними реализована в Borland C++ Builder 6 через наборы свойств, событий, и методов. Компоненты, размещаемые на редакторе форм в ходе разработки пользовательского интерфейса программы, еще не запрограммированы на какие-либо действия пользователя. Поэтому для каждой компоненты нужно написать ответную реакцию на какое-либо событие пользователя, например, запрограммировать вывод определенного сообщения, если пользователь нажал на ту или иную кнопку в программе.

4.2 Разработка серверной части

Создадим новый проект, на форме разместим компоненты согласно рисунка 4.2.1.

Рис. 4.2.1 Внешний вид основной формы серверной части приложения "Чат"

Значения свойств формы и свойств компонент, размещенных на форме приведены в таблице 4.2.1.

Табл. 4.2.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_ServerMode

Caption

Режим работы

TCombobox

Name

ComboBox_ServerMode

Items

On-Line | Off-Line

ItemIndex

1

TGroupBox

Name

GroupBox_ClientList

Caption

Список клиентов

TListBox

Name

ListBox_ClientList

TServerSocket

Name

ServerSocket1

Active

False

Port

2000

ServerType

stNonBlocking

TServerSocket

Name

ServerSocket2

Active

False

Port

3000

ServerType

stNonBlocking

TStatusBar

Name

StatusBar1

Panels

0 - TStatusPanel

Добавим форму к проекту, разместим компоненты согласно рисунка 4.2.2.

Рис. 4.2.2 Внешний вид формы серверной части приложения Чат, предназначенной для отправки сообщений и файлов

Значения свойств формы и свойств компонент, размещенных на форме приведены в таблице 4.2.2.

Табл. 4.2.2 Основные значения свойств формы и свойств компонент, размещенных на форме, предназначенной для отправки сообщений и файлов

Свойство

Значение

Окно формы TForm

Name

SendForm

Caption

Отправка-прием

Height

210

Width

380

TMemo

Name

Memo_Chat

Lines

пусто

ReadOnly

True

TEdit

Name

Edit_SendText

Text

пусто

TButton

Name

Button_SendText

Caption

Отправить текст

TBevel

Name

Bevel1

Width

360

Height

3

TButton

Name

Button_SendFile

Caption

Отправить файл

TOpenDialog

Name

OpenDialog1

Далее необходимо написать обработчики возможных событий, которые могут произойти во время работы с программой, реализовать логику работы программы.

При запуске серверной части программы "Чат" необходимо указать IP-адрес сервера и выбрать режим работы "On-Line" (рис. 4.2.3). Если сервер и клиент запускаются на одном и том же компьютере, то можно ввести в качестве IP-адреса - 127.0.0.1

Рис. 4.2.3 Окно серверной части приложения после запуска

серверный файл приложение визуальный

В Borland C++ Builder 6 для организации клиент-серверных приложений можно использовать такие компоненты как TServerSocket и TClientSocket. На сервере будем использовать две компоненты TServerSocket - одну для обмена сообщениями, другую для обмена файлами.

После ввода параметров соединения и выбора режима работы "On-Line" обе компоненты TServerSocket активируются и после этого сервер ждет подключения клиента. В режиме "Off-Line" обе компоненты TServerSocket деактивируются, все подключенные к серверу клиенты теряют соединение.

// Выбор режима работы

void __fastcall TMainForm::ComboBox_ServerModeChange(TObject *Sender)

{

// Если On-Line, то:

if (ComboBox_ServerMode->ItemIndex == 0)

{

ServerSocket1->Active = True; // активируем ServerSocket1

ServerSocket2->Active = True; // активируем ServerSocket2

// В строке состояния (внизу программы) пишем "Работаем"

StatusBar1->Panels->Items[0]->Text = "Работаем";

}

// Если Off-Line, то деактивируем ServerSocket1 и ServerSocket2

if (ComboBox_ServerMode->ItemIndex == 1)

{

ServerSocket1->Active = False; // деактивируем ServerSocket1

ServerSocket2->Active = False; // деактивируем ServerSocket2

// В строке состояния (внизу программы) пишем "Не работаем"

StatusBar1->Panels->Items[0]->Text = "Не работаем";

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

}

При подключении клиента он добавляется в список клиентов.

// Когда клиент подсоединился

void __fastcall TMainForm::ServerSocket1ClientConnect(TObject *Sender,

TCustomWinSocket *Socket)

{

// Добавляем его в список клиентов

ListBox_ClientList->Items->Add("Клиент");

}

После этого можно начинать отправку клиенту сообщений или файлов. Для этого нужно сделать двойной щелчок мышью на имени клиента в списке. После чего откроется окно "Отправка-прием" (рис. 4.2.4).

Обработчик события при щелчке на имени клиента в списке клиентов следующий.

// Для отправки сообщения/файла клиенту щелкаем в списке клиентов

// строчку "Клиент"

void __fastcall TMainForm::ListBox_ClientListDblClick(TObject *Sender)

{

SendForm->ShowModal(); // Показываем форму для отправки сообщений

}

Рис. 4.2.4 Основное окно сервера и окно "Отправка-прием"

Текст набираем в поле ввода, после чего нажимаем на кнопку "Отправить текст". Обработчик события для этой кнопки следующий.

// При нажатии на кнопку "Отправить текст"

void __fastcall TSendForm::Button_SendTextClick(TObject *Sender)

{

// Добавляем отправляемый текст в окно чата

Memo_Chat->Lines->Add("Сервер: "+Edit_SendText->Text);

// Отправляем текст клиенту

MainForm->ServerSocket1->Socket->Connections[0]->SendText("Сервер: " + Edit_SendText->Text);

// Очищаем поле ввода текста

Edit_SendText->Text = "";

}

Для отправки файла необходимо нажать на кнопку "Отправить файл". Обработчик события для этой кнопки следующий.

// Отправка файла клиенту при нажатии кнопки "Отправить файл"

void __fastcall TSendForm::Button_SendFileClick(TObject *Sender)

{

// Открываем диалоговое окно выбора файла

if (SendForm->OpenDialog1->Execute())

{

// Если файл выбран, то используем имя файла

if (SendForm->OpenDialog1->FileName != "")

{

//Открываем файл на чтение и передаем его клиенту

TFileStream* f1=new TFileStream(SendForm->OpenDialog1->FileName, fmOpenRead);

MainForm->ServerSocket2->Socket->Connections[0]->SendStream(f1);

//Добавляем в окно Чата сообщение, что такой-то файл отправлен

Memo_Chat->Lines->Add("Файл " + OpenDialog1->FileName + " отправлен");

}

}

}

При получении сообщения от клиента добавляем его в окно чата, расположенное на форме "Отправка-прием".

// В случае, если от клиента пришло текстовое сообщение

void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,

TCustomWinSocket *Socket)

{

// Заносим его в окно чата

SendForm->Memo_Chat->Lines->Add(Socket->ReceiveText());

}

При отключении клиента от сервера очищаем список клиентов.

// Если клиент отсоединился

void __fastcall TMainForm::ServerSocket1ClientDisconnect(TObject *Sender, TCustomWinSocket *Socket)

{

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

При завершении работы сервера, при закрытии программы, деактивируем сокеты 1 и 2.

// При завершении работы сервера (при закрытии программы)

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)

{

ServerSocket1->Active = False; // деактивируем ServerSocket1

ServerSocket2->Active = False; // деактивируем ServerSocket2

}

Все вышеприведенные свойства компонент и обработчики событий вводятся непосредственно в среде разработки программного обеспечения - Borland C++ Builder 6, во время разработки приложения. Выделив нужную компоненту из тех, что мы разместили на форме, нужно выбрать в Инспекторе объектов (Object Inspertor) среды Borland C++ Builder 6 то или иное свойство на вкладке Properties или событие на вкладке Events, изменить значение свойства или написать обработчик события.

4.3 Разработка клиентской части

Создадим новый проект, на форме разместим компоненты согласно рисунка 4.3.1.

Рис. 4.3.1 Внешний вид формы клиентской части приложения "Чат"

Значения свойств формы и свойств компонент, размещенных на форме приведены в таблице 4.3.1.

Табл. 4.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

Добавим форму к проекту, разместим компоненты согласно рисунка 4.3.2.

Рис. 4.3.2 Внешний вид формы клиентской части приложения Чат, предназначенной для отправки сообщений и приема файлов

Значения свойств формы и свойств компонент, размещенных на форме приведены в таблице 4.3.2.

Табл. 4.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" (рис. 4.3.3). Если сервер и клиент запускаются на одном и том же компьютере, то можно ввести в качестве IP-адреса - 127.0.0.1

Рис. 4.3.3 Окно клиентской части приложения после запуска

В Borland C++ Builder 6 для организации клиент-серверных приложений можно использовать такие компоненты как TServerSocket и TClientSocket. На клиенте будем использовать две компоненты TClientSocket - одну для обмена сообщениями, другую для обмена файлами.

После ввода параметров соединения и выбора режима работы "On-Line" обе компоненты TClientSocket активируются и пытаются подключиться к серверу. В случае удачного подключения к серверу, сервер добавляется в список клиентов. В режиме "Off-Line" обе компоненты TClientSocket деактивируются, и разрывают соединение с сервером.

// Выбор режима работы

void __fastcall TMainForm::ComboBox_ClientModeChange(TObject *Sender)

{

// Если On-Line

if (ComboBox_ClientMode->ItemIndex == 0)

{

// Присваиваем 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]->Text = "Работаем";

// В список клиентов добавляем "Сервер"

ListBox_ClientList->Items->Add("Сервер");

}

// Если Off-Line

if (ComboBox_ClientMode->ItemIndex == 1)

{

ClientSocket1->Active = False;//Деактивируем соединение сокета 1

ClientSocket2->Active = False;//Деактивируем соединение сокета 2

// В строке состояния программы пишем "Не работаем"

StatusBar1->Panels->Items[0]->Text = "Не работаем";

// Очищаем список клиентов

ListBox_ClientList->Clear();

}

}

Если произошла ошибка соединения с сервером, то в строке состояния сообщаем об этом. Также переводим клиента в режим "Off-line" и очищаем список клиентов.

// Если произошла ошибка соединения с сервером

void __fastcall TMainForm::ClientSocket1Error(TObject *Sender,

TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)

{

ErrorCode = 0;

// В строке состояния пишем "Ошибка соединения"

StatusBar1->Panels->Items[0]->Text = "Ошибка соединения";

// В списке режимов работы выбираем "Off-Line"

ComboBox_ClientMode->ItemIndex = 1;

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

В случае удачного подключения к серверу можно начинать отправку сообщений и прием файлов. Для этого нужно сделать двойной щелчок мышью на имени сервера в списке клиентов. После чего откроется окно "Отправка-прием" (рис. 4.3.4).

Обработчик события при щелчке на имени сервера в списке клиентов следующий.

// Для отправки сообщения серверу щелкаем в списке клиентов

// строчку "Сервер"

void __fastcall TMainForm::ListBox_ClientListDblClick(TObject *Sender)

{

SendForm->ShowModal(); // Показываем форму для отправки сообщений

}

Рис. 4.3.4 Основное окно клиента и окно "Отправка-прием"

Текст набираем в поле ввода, после чего нажимаем на кнопку "Отправить текст". Обработчик события для этой кнопки следующий.

// При нажатии на кнопку "Отправить текст"

void __fastcall TSendForm::Button_SendTextClick(TObject *Sender)

{

// Добавляем отправляемый текст в окно чата

Memo_Chat->Lines->Add("Клиент: "+Edit_SendText->Text);

// Отправляем текст серверу

MainForm->ClientSocket1->Socket->SendText("Клиент: " +

Edit_SendText->Text);

// Очищаем поле ввода текста

Edit_SendText->Text = "";

}

Для приема файла служит компонента ClientSocket2. При получении файла от сервера выполняется следующий обработчик события.

// Прием файла

void __fastcall TMainForm::ClientSocket2Read(TObject *Sender,

TCustomWinSocket *Socket)

{

ShowMessage("Принимается файл...");

//Открывается диалог сохранения файла

if (SendForm->SaveDialog1->Execute())

{

//Если указали имя файла при сохранении файла

if (SendForm->SaveDialog1->FileName != "")

{

Pointer buff; // объявляем буфер

int iLen; // указываем длину буфера

// Создаем файл

TFileStream* f2=new TFileStream(SendForm->SaveDialog1->FileName, fmCreate);

// уточняем размер данных, полученных от сервера

iLen = ClientSocket2->Socket->ReceiveLength();

// выделяем память для буфера

buff = GetMemory(iLen);

//копируем буфер сокета в буфер buff

ClientSocket2->Socket->ReceiveBuf(buff,iLen);

//передаем данные из буфера buff в файл

f2->Write(buff,iLen);

f2->Free();

// добавляем в окно чата сообщение, что файл полуен

SendForm->Memo_Chat->Lines->Add("Файл " + SendForm->SaveDialog1->FileName + " получен");

}

}

}

При получении сообщения от сервера добавляем его в окно чата, расположенное на форме "Отправка-прием".

// При получении сообщения от сервера добавляем его в окно чата

void __fastcall TMainForm::ClientSocket1Read(TObject *Sender,

TCustomWinSocket *Socket)

{

SendForm->Memo_Chat->Lines->Add(ClientSocket1->Socket->ReceiveText());

}

При отключении клиента от сервера выбираем в списке режимов режим "Off-Line", в строке состояния программы указываем "Не работаем", очищаем список клиентов.

// При отсоединении от сервера

void __fastcall TMainForm::ClientSocket1Disconnect(TObject *Sender,

TCustomWinSocket *Socket)

{

// В списке режимов работы указываем "Off-Line"

ComboBox_ClientMode->ItemIndex = 1;

// В строке состояния программы пишем "Не работаем"

StatusBar1->Panels->Items[0]->Text = "Не работаем";

// Очищаем список клиентов

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, во время разработки приложения. Выделив нужную компоненту из тех, что мы разместили на форме, нужно выбрать в Инспекторе объектов (Object Inspertor) среды Borland C++ Builder 6 то или иное свойство на вкладке Properties или событие на вкладке Events, изменить значение свойства или написать обработчик события.

Заключение

В данной работе необходимо было разработать клиент-серверное приложение "Чат" с возможностью файлового обмена. Для разработки приложение использовалась интегрированная среда разработки Borland C++ Builder 6. Главным преимуществом данной среды является быстрота разработки программного обеспечения, благодаря наличию визуальных средств проектирования приложения, таких, как формы и набор визуальных и невизуальных компонент, обладающих богатым функционалом.

В ходе проектирования приложения было принято решение о реализации приложения в виде двух программ - клиентской и серверной части. Был разработан примерный алгоритм работы каждой из частей.

Заключительным этапом явилась непосредственная реализация серверной и клиентской части в среде разработки программного обеспечения Borland C++ Builder 6. Полученный программный продукт работоспособен, имеет необходимую функциональность - возможность передачи текста и файлов между двумя компьютерами, подключенными к локальной вычислительной сети. Отправка файлов реализована на стороне сервера, прием - на стороне клиента. Отправка и прием текстовых сообщений реализованы как на стороне сервера, так и на стороне клиента.

Список используемых источников

1. А.Я. Архангельский. Программирование в C++Builder. 7-е изд. -М.: ООО "Бином-Пресс", 2010 г. - 1230 с.

2. С.И. Бобровский. Технологии C++Builder. Разработка приложения для бизнеса. Учебный курс. - СПб.: Питер, 2007

Приложения

Приложение 1

Основной программный код серверной части приложения "Чат". Файл "UMainForm.cpp"

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "UMainForm.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TMainForm *MainForm;

//---------------------------------------------------------------------------

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

// Выбор режима работы

void __fastcall TMainForm::ComboBox_ServerModeChange(TObject *Sender)

{

// Если On-Line, то:

if (ComboBox_ServerMode->ItemIndex == 0)

{

ServerSocket1->Active = True; // активируем ServerSocket1

ServerSocket2->Active = True; // активируем ServerSocket2

// В строке состояния (внизу программы) пишем "Работаем"

StatusBar1->Panels->Items[0]->Text = "Работаем";

}

// Если Off-Line, то деактивируем ServerSocket1 и ServerSocket2

if (ComboBox_ServerMode->ItemIndex == 1)

{

ServerSocket1->Active = False; // деактивируем ServerSocket1

ServerSocket2->Active = False; // деактивируем ServerSocket2

// В строке состояния (внизу программы) пишем "Не работаем"

StatusBar1->Panels->Items[0]->Text = "Не работаем";

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

}

//---------------------------------------------------------------------------

// При завершении работы сервера (при закрытии программы)

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)

{

ServerSocket1->Active = False; // деактивируем ServerSocket1

ServerSocket2->Active = False; // деактивируем ServerSocket2

}

//---------------------------------------------------------------------------

// Когда клиент подсоединился

void __fastcall TMainForm::ServerSocket1ClientConnect(TObject *Sender,

TCustomWinSocket *Socket)

{

// Добавляем его в список клиентов

ListBox_ClientList->Items->Add("Клиент");

}

//---------------------------------------------------------------------------

// Если произошла ошибка соединения с клиентом

void __fastcall TMainForm::ServerSocket1ClientError(TObject *Sender,

TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)

{

ErrorCode = 0;

// В строке состояния пишем "Ошибка соединения"

StatusBar1->Panels->Items[0]->Text = "Ошибка соединения";

// В списке режимов работы выбираем "Off-Line"

ComboBox_ServerMode->ItemIndex = 1;

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

//---------------------------------------------------------------------------

// Если клиент отсоединился

void __fastcall TMainForm::ServerSocket1ClientDisconnect(TObject *Sender,

TCustomWinSocket *Socket)

{

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

//---------------------------------------------------------------------------

// Для отправки сообщения/файла клиенту щелкаем в списке клиентов

// строчку "Клиент"

void __fastcall TMainForm::ListBox_ClientListDblClick(TObject *Sender)

{

SendForm->ShowModal(); // Показываем форму для отправки сообщений

}

//---------------------------------------------------------------------------

// В случае, если от клиента пришло текстовое сообщение

void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,

TCustomWinSocket *Socket)

{

// Заносим его в окно чата

SendForm->Memo_Chat->Lines->Add(Socket->ReceiveText());

}

//---------------------------------------------------------------------------

Приложение 2

Основной программный код серверной части приложения "Чат". Файл " USendForm.cpp"

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "USendForm.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TSendForm *SendForm;

//---------------------------------------------------------------------------

__fastcall TSendForm::TSendForm(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

// При нажатии на кнопку "Отправить текст"

void __fastcall TSendForm::Button_SendTextClick(TObject *Sender)

{

// Добавляем отправляемый текст в окно чата

Memo_Chat->Lines->Add("Сервер: "+Edit_SendText->Text);

// Отправляем текст клиенту

MainForm->ServerSocket1->Socket->Connections[0]->SendText("Сервер: " +

Edit_SendText->Text);

// Очищаем поле ввода текста

Edit_SendText->Text = "";

}

//---------------------------------------------------------------------------

// Отправка файла клиенту при нажатии кнопки "Отправить файл"

void __fastcall TSendForm::Button_SendFileClick(TObject *Sender)

{

// Открываем диалоговое окно выбора файла

if (SendForm->OpenDialog1->Execute())

{

// Если файл выбран, то используем имя файла

if (SendForm->OpenDialog1->FileName != "")

{

//Открываем файл на чтение и передаем его клиенту

TFileStream* f1 = new TFileStream(SendForm->OpenDialog1->FileName, fmOpenRead);

MainForm->ServerSocket2->Socket->Connections[0]->SendStream(f1);

//Добавляем в окно Чата сообщение, что такой-то файл отправлен

Memo_Chat->Lines->Add("Файл " + OpenDialog1->FileName + " отправлен");

}

}

}

//---------------------------------------------------------------------------

Приложение 3

Основной программный код клиентской части приложения "Чат". Файл "UMainForm.cpp"

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "UMainForm.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TMainForm *MainForm;

//---------------------------------------------------------------------------

__fastcall TMainForm::TMainForm(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

// Выбор режима работы

void __fastcall TMainForm::ComboBox_ClientModeChange(TObject *Sender)

{

// Если On-Line

if (ComboBox_ClientMode->ItemIndex == 0)

{

// Присваиваем 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]->Text = "Работаем";

// В список клиентов добавляем "Сервер"

ListBox_ClientList->Items->Add("Сервер");

}

// Если Off-Line

if (ComboBox_ClientMode->ItemIndex == 1)

{

ClientSocket1->Active = False; // Деактивируем соединение сокета 1

ClientSocket2->Active = False; // Деактивируем соединение сокета 2

// В строке состояния программы пишем "Не работаем"

StatusBar1->Panels->Items[0]->Text = "Не работаем";

// Очищаем список клиентов

ListBox_ClientList->Clear();

}

}

//---------------------------------------------------------------------------

// В случае закрытия программы разрываем соединение с сервером

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)

{

ClientSocket1->Active = False; // Деактивируем соединение сокета 1

ClientSocket2->Active = False; // Деактивируем соединение сокета 2

}

//---------------------------------------------------------------------------

// Если произошла ошибка соединения с сервером

void __fastcall TMainForm::ClientSocket1Error(TObject *Sender,

TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)

{

ErrorCode = 0;

// В строке состояния пишем "Ошибка соединения"

StatusBar1->Panels->Items[0]->Text = "Ошибка соединения";

// В списке режимов работы выбираем "Off-Line"

ComboBox_ClientMode->ItemIndex = 1;

ListBox_ClientList->Clear(); // Очищаем список клиентов

}

//---------------------------------------------------------------------------

// При отсоединении от сервера

void __fastcall TMainForm::ClientSocket1Disconnect(TObject *Sender,

TCustomWinSocket *Socket)

{

// В списке режимов работы указываем "Off-Line"

ComboBox_ClientMode->ItemIndex = 1;

// В строке состояния программы пишем "Не работаем"

StatusBar1->Panels->Items[0]->Text = "Не работаем";

// Очищаем список клиентов

ListBox_ClientList->Clear();

}

//---------------------------------------------------------------------------

// Для отправки сообщения серверу щелкаем в списке клиентов

// строчку "Сервер"

void __fastcall TMainForm::ListBox_ClientListDblClick(TObject *Sender)

{

SendForm->ShowModal(); // Показываем форму для отправки сообщений

}

//---------------------------------------------------------------------------

// При получении сообщения от сервера добавляем его в окно чата

void __fastcall TMainForm::ClientSocket1Read(TObject *Sender,

TCustomWinSocket *Socket)

{

SendForm->Memo_Chat->Lines->Add(ClientSocket1->Socket->ReceiveText());

}

//---------------------------------------------------------------------------

// Прием файла

void __fastcall TMainForm::ClientSocket2Read(TObject *Sender,

TCustomWinSocket *Socket)

{

ShowMessage("Принимается файл...");

//Открывается диалог сохранения файла

if (SendForm->SaveDialog1->Execute())

{

//Если указали имя файла при сохранении файла

if (SendForm->SaveDialog1->FileName != "")

{

Pointer buff; // объявляем буфер

int iLen; // указываем длину буфера

// Создаем файл

TFileStream* f2 = new TFileStream(SendForm->SaveDialog1->FileName, fmCreate);

// уточняем размер данных, полученных от сервера

iLen = ClientSocket2->Socket->ReceiveLength();

// выделяем память для буфера

buff = GetMemory(iLen);

//копируем буфер сокета в буфер buff

ClientSocket2->Socket->ReceiveBuf(buff,iLen);

//передаем данные из буфера buff в файл

f2->Write(buff,iLen);

f2->Free();

// добавляем в окно чата сообщение, что файл получен

SendForm->Memo_Chat->Lines->Add("Файл " + SendForm->SaveDialog1->FileName + " получен");

}

}

}

//---------------------------------------------------------------------------

Приложение 4

Основной программный код клиентской части приложения "Чат". Файл " USendForm.cpp"

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "USendForm.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TSendForm *SendForm;

//---------------------------------------------------------------------------

__fastcall TSendForm::TSendForm(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

// При нажатии на кнопку "Отправить текст"

void __fastcall TSendForm::Button_SendTextClick(TObject *Sender)

{

// Добавляем отправляемый текст в окно чата

Memo_Chat->Lines->Add("Клиент: "+Edit_SendText->Text);

// Отправляем текст серверу

MainForm->ClientSocket1->Socket->SendText("Клиент: " +

Edit_SendText->Text);

// Очищаем поле ввода текста

Edit_SendText->Text = "";

Размещено на Allbest.ru


Подобные документы

  • Разработка системы, базирующейся на протоколе LIMone, для обмена мгновенными сообщениями и пересылки файлов в процессе деловой переписки. Реализация системы в виде клиент-серверного приложения. Расчет экономических показателей программного продукта.

    дипломная работа [4,7 M], добавлен 22.08.2016

  • Сетевое программное обеспечение: общее понятие, содержание, функции. Этапы развития теории компьютерных сетей. Проектирование в среде программирования Borland Builder C++ клиент серверного приложения с использованием сокетов, листинг данной программы.

    курсовая работа [191,5 K], добавлен 07.01.2015

  • Многоуровневые архитектуры клиент–сервер. Диаграммы классов, реализующих уровни презентации, бизнес–логики и базы данных приложения. Словесное описание процесса выполнения транзакций. Создание, изменение и удаление хранимых процедур, их выполнение.

    курсовая работа [3,4 M], добавлен 23.03.2013

  • Проектирование физической и логической моделей удаленной базы данных для АЗС. Разработка базы данных в СУБД Firebird с помощью утилиты IBExpert. Создание клиентского приложения для Windows с использованием клиент-серверной технологии в среде C++ Builder.

    курсовая работа [3,9 M], добавлен 18.01.2017

  • Изучение истории достижений корпорации Oracle. Разработка клиент-серверного приложения на языке Delphi XE, реализующего возможность управления персоналом на предприятии. Основные структуры данных. Создание инструкции работы с приложением "Отдел кадров".

    дипломная работа [974,7 K], добавлен 08.06.2013

  • Разработка конфигурации службы. Исследование вычислительной эффективности алгоритма оптимизации. Программная реализация клиент-серверного приложения. Алгоритм решения непрерывной задачи загрузки рюкзака. Подключение веб-сервиса к клиентскому приложению.

    курсовая работа [1,4 M], добавлен 21.01.2017

  • Разработка клиент-серверного приложения, позволяющего взаимодействовать друг с другом с использованием доступа к базам данных. Проектирование связи сервера с базой данных с помощью технологии ODBC. Разработка интерфейса программы, ее тестирование.

    курсовая работа [352,0 K], добавлен 24.08.2016

  • Основные концепции разработки приложения в архитектуре MVVM. Проектирование базы данных, предназначенной для сбора информации о дорожно-транспортных происшествиях. Классификация и типы архитектуры "клиент–сервер", ее основные достоинства и недостатки.

    курсовая работа [4,1 M], добавлен 25.11.2015

  • Характеристика подходов к построению CRM-систем. Разработка клиент-серверного приложения, которое предоставляет возможность управления взаимоотношениями с клиентами на платформе ASP.NET Web Froms. Проработка некоторых аспектов безопасности CRM-систем.

    курсовая работа [686,2 K], добавлен 24.04.2015

  • Особенности настройки корпоративной сети предприятия. Разработка приложения, обеспечивающего эффективную работу клиент-серверной сети железнодорожной кассы. Защита от несанкционированного доступа, специфика шифрования паролей и ряд других средств защиты.

    курсовая работа [5,9 M], добавлен 30.01.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.