Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сис прог печать.doc
Скачиваний:
27
Добавлен:
11.12.2018
Размер:
329.22 Кб
Скачать

Задание №4 Обмен данными между приложениями с использованием технологии динамического обмена данными с помощью сокетов

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

Индивидуальное задание : Разработать серверное приложение, в котором осуществляется вызов изученных в соответствии с индивидуальным заданием к первой лабораторной работе функций, обработка и представление в понятном для пользователя виде возвращаемых ними результатов или достигаемых с их помощью эффектов (изменений режимов работы объектов операционной системы или пользовательского интерфейса).Разработать клиентское приложение, в котором будет осуществляться прием и отображение данных, получаемых по запросу от сервера.Организовать обмен данными, возвращаемыми Вашими функциями Windows API, между серверным и клиентским приложениями с использованием технологии сокетов.

Решение

1) Со́кеты — название программного интерфейса для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет — абстрактный объект, представляющий конечную точку соединения.

В среде Builder C++ сокеты доступны как с базовых функций библиотеки winsock.h так и производными класамия(надстройкой) над сокетами, классами TServerSocket и TClientSocket.

2) TServerSocket и TClientSocket содержит такие свойства как адрес хоста, порт, активность сервера(клиента), а также методы для отправки сообщений и обработчики событий подключений, чтения и записи данных.

3)В данной программе упаковка данных производится в такую же структуру как и в первой программе , передача данных от клиента к серверу осуществляется посредством ClientSocket->Socket->SendBuf(), в которую передается наша структура с текстом и командой.

4)Сервер получает данную структуру через Socket->ReceiveBuf() в обработчике событий OnRead().Далее сервер выполняет команды(функции) и передает результат в этой структуре о результате работе функций. Данные передаются посредством функций Socket->SendBuf(). С клиентской стороны обрабатывается посредством OnRead(). Результат действий выводится на экран как клиента так и сервера

Исходный код

Сервер:

typedef struct tagInfo{

char s[80];

DWORD dwData;

DWORD attrib;

FILETIME time;

}Info;

Info in,out,outTime;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ServerSocket1->Open();

}

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,

TCustomWinSocket *Socket)

{

SYSTEMTIME Stime;

GetLocalTime(&Stime);

Socket->ReceiveBuf(&in,Socket->ReceiveLength());

if(in.dwData == 5){

GetCurrentDirectory(sizeof(out.s),out.s);

Memo1->Lines->Add(Socket->RemoteAddress + " доступ:" + out.s);

out.dwData = 10;

Socket->SendBuf(&out,sizeof(out));

}

if(in.dwData == 20){

SystemTimeToFileTime(&Stime,&outTime.time);

Memo1->Lines->Add(Socket->RemoteAddress + " доступ SYSTEMTIME" );

outTime.dwData = 25;

Socket->SendBuf(&outTime,sizeof(outTime));

}

}

Клиент:

TForm1 *Form1;

typedef struct tagInfo{

char s[80];

DWORD dwData;

DWORD attrib;

FILETIME time;

}Info;

Info out,in;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//ClientSocket1->Host = Edit3->Text;

ClientSocket1->Open();

}

void __fastcall TForm1::Button2Click(TObject *Sender)

{

out.dwData = 5;

ClientSocket1->Socket->SendBuf(&out,sizeof(out));

}

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,

TCustomWinSocket *Socket)

{

Socket->ReceiveBuf(&in,Socket->ReceiveLength());

if(in.dwData == 10){

Edit2->Text = in.s;

}

if(in.dwData == 25){

Edit4->Text = in.time.dwLowDateTime;

Edit1->Text = in.time.dwHighDateTime;

}

}

void __fastcall TForm1::Button3Click(TObject *Sender)

{

out.dwData = 20;

ClientSocket1->Socket->SendBuf(&out,sizeof(out));

}

Результат работы программы :

Вывод: Сокеты сейчас являются одним из наиболее часто используемыми в связи с развитием технологий глобальной секи для обмена данными.Позволяют передать данные между приложениями не только на одном компьютере но и использовать для обмена данными между несколькими компьютерами.