Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО курсач.rtf
Скачиваний:
14
Добавлен:
19.09.2019
Размер:
8.81 Mб
Скачать

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

    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