![](/user_photo/2706_HbeT2.jpg)
- •Кафедра кит контрольная работа по дисциплине "Системное программирование"
- •Краматорск 2011 Задание №1
- •Задание №2
- •Задание №3
- •Решение
- •Задание №4 Обмен данными между приложениями с использованием технологии динамического обмена данными с помощью сокетов
- •Решение
- •Задание № 5 Обмен данными между приложениями с использованием технологии динамического обмена данными с помощью именованных каналов
- •Задание №6 Использование технологии сом при разработке приложений в Delphi. Создание и использование внутреннего сервера
Задание №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));
}
Результат работы программы :
Вывод: Сокеты сейчас являются одним из наиболее часто используемыми в связи с развитием технологий глобальной секи для обмена данными.Позволяют передать данные между приложениями не только на одном компьютере но и использовать для обмена данными между несколькими компьютерами.