готов лаби 4 курс 1 сим / Вычислительные системы / laba_3
.docxМіністерство освіти і науки, молоді та спорту України
Кіровоградський національний технічний університет
МТФ
Кафедра Програмного забезпечення
Дисципліна Обчислювальні системи
Лабораторна робота №3
Тема:Створення мерережної взаємодії за допомогою сокетів в середовищі ОС Windows та візуального програмування.
Виконав ст. гр. КІ-09-2
Кірнус Л.Є.
Перевірив викладач
Доренський О.П.
Кіровоград 2012
Завдання до лабораторної роботи:
Спроектуйте свій візуальний клієнт-сервер аналогічний до наведеного на малюнку 3.2 використовуючи компоненти TClineSocket/TserverSocket та організуйте обмін даними між процесами на клієнті та сервері через файли.
Лістинг
//-----------------------------------------------
#include <vcl.h>
#include <string>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ClientSocket1->Active = false;
ServerSocket1->Active = true;
StatusBar1->SimpleText = " Серверпрослуховуєпорт " +
IntToStr(ServerSocket1->Port) + " ... ";
}
//----------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (ClientSocket1->Active) ClientSocket1->Active = false;
Server=ComboBox1->Text;
if (Server.Length() > 0)
{
ClientSocket1->Host = Server;
ServerSocket1->Active = true;
ClientSocket1->Active = true;
}
}
//-------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Close(); // закритиклієнта
ServerSocket1->Close(); // закритисервер
}
//-------------------------------------------------
void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
TCustomWinSocket *Socket)
{
IsServer = true;
StatusBar1->SimpleText = "Запитназ'єднання з клієнтом IP:" +
Socket->RemoteAddress + " прийнято ";
}
//------------------------------------------------
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Add(Socket->ReceiveText());
}
//-------------------------------------------------
void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->SimpleText = " З'єднаннярозірвано";
}
//-------------------------------------------------
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
TCustomWinSocket *Socket, TErrorEventErrorEvent, int&ErrorCode)
{
StatusBar1->SimpleText = " Помилказ'єднання з сервером " + Server;
ErrorCode = 0;
}
//-------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientConnect(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Clear();
}
//------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
Memo2->Lines->Add(Socket->ReceiveText()) ;
}
//-------------------------------------------------
void __fastcall TForm1::ServerSocket1ClientDisconnect(TObject *Sender,
TCustomWinSocket *Socket)
{
StatusBar1->SimpleText = "З'єднання з сервером " + Socket->RemoteHost +
"встановленно";
}
//-------------------------------------------------
void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if (RadioGroup1->ItemIndex==-1)
{
ShowMessage("Опція для типу передачіданих не задана");
}
if (RadioGroup1->ItemIndex==0)
{
if (Key == VK_RETURN)
{
if (IsServer)
ServerSocket1->Socket->Connections[0]->SendText(Memo1->Lines->
Strings[Memo1->Lines->Count - 1]);
else
ClientSocket1->Socket->SendText( Memo1->Lines->Strings[Memo1->Lines-> Count - 1]);
}
}
else if (RadioGroup1->ItemIndex==1)
{
Memo1->Lines->LoadFromFile("1.txt");
if (Key == VK_RETURN)
{
if (IsServer)
ServerSocket1->Socket->Connections[0]->SendText(Memo1->Lines->
Strings[Memo1->Lines->Count - 1]);
else
ClientSocket1->Socket->SendText( Memo1->Lines->Strings[Memo1->Lines-> Count - 1]);
}
}
}
//------------------------------------------