ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

Аэрокосмический институт

Кафедра систем автоматизации производства

ОТЧЕТ

по лабораторной работе №7

по дисциплине «Электроника»

Исследование биполярных транзисторов в программе Electronic Workbench

ОГУ 220301.65.9013. О

Руководитель:

" " 2013г.

Исполнители:

студенты группы 10 АТП

" " 2013г.

Оренбург 2013

Содержание

1 Цель работы.. 3

2 Задание на лабораторную работу. 4

3 Теоретическая часть. 5

4 Практическая часть лабораторной работы.. 6

4.1 Создание программы для обмена сообщениями. 6

4.2 Создание программы для передачи массивов. 12

Вывод. 17

Список использованных источников. 18

 

1 Цель работы

Цели:

- разобрать предлагаемый теоретический материал, изучить клиент-серверное взаимодействие посредством сокетов;

- изучить свойства компонентов TClientSocket и TServerSocket/

2 Задание на лабораторную работу

1.  Создать программу для обмена сообщения в среде Delphi на основе компонентов TClientSocket и TServerSocket;

2.  Добавить процедуру обмена сообщениями в обе стороны;

3.  Организовать обмен сообщениями между двумя компьютерами, определив IP-адрес из программы winipcfg;

4.  Написать программу обмена между двумя компьютерами массивами чисел, представдленными в виде матрицы (таблицы N x N)

3 Теоретическая часть

Браузеры автоматически формируют графическое отображение Web-страниц, посланных сервером. Для стандартного Web-сайта этого вполне достаточно, но когда нужно строить клиент-серверное взаимодействие, основанное на передаче/приёме данных, которые не являются HTML-документами, или нужно создавать решения, где не используются браузеры и клиентская программа должна сама формировать представления информации, то в этих случаях прибегают к сокетам.

Сокеты – это объекты, которые включают в себя все необходимые средства для обмена данными в сетях Internet/Intranet. Эти объекты создают соединения и посылают/принимают данные, что позволяет программисту организовывать взаимодействие между различными программными компонентами также легко, как, например, чтение и запись в файл. При работе в сети различают два типа сокетов: клиентский и серверный.

НЕ нашли? Не то? Что вы ищете?

Клиентский сокет предназначен для установления связи с сервером, точнее, с серверным сокетом. Нахождение нужного сервера осуществляется в сети по его имени, либо по IP-адресу. Объектам клиент-сокет и сервер-сокет в среде программирования Делфи соответствуют классы TClientSocket и TServerSocket соответственно.

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

При идентификации сервера программисту следует учитывать следующее:

- в одноранговых сетях, использующих протоколы NetBEUI (производство Microsoft) или IPX/SPX (технология Novell), в которых компьютеры не имеют своих IP-адресов, для установки имени компьютера используется поле host вместо поля address;

- в IP-сетях желательно указывать IP-адрес, т. к. при указании доменного имени сокетные компоненты всё равно запрашивают у DNS IP-адрес, что требует определённого времени.

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

4 Практическая часть лабораторной работы

4.1  Создание программы для обмена сообщениями

Код программы (Delphi):

o  procedure TForm1.FormCreate(Sender: TObject);

o  begin

o  PortEdit. Text:='777';

o  HostEdit. Text:='127.0.0.1';

o  NikEdit. Clear;

o  TextEdit. Clear;

o  ChatMemo. Lines. Clear;

o  end;

o  procedure TForm1.ServerBtnClick(Sender: TObject);

o  begin

o  If ServerBtn. Tag=0 then

o  Begin

o  ClientBtn. Enabled:=False;

o  HostEdit. Enabled:=False;

o  PortEdit. Enabled:=False;

o  ServerSocket1.Port:=StrToInt(PortEdit. Text);

o  ServerSocket1.Active:=True;

o  ChatMemo. Lines. Add('Bot: Ãî â Äîòó, ÿ ñîçäàë!');

o  ServerBtn. Tag:=1;

o  ServerBtn. Caption:='Çàêðûòü';

o  end

o  else

o  Begin

o  ClientBtn. Enabled:=True;

o  HostEdit. Enabled:=True;

o  PortEdit. Enabled:=True;

o  ServerSocket1.Active:=False;

o  ChatMemo. Lines. Add('Bot: Ñåðâåð çàêðûò. Èäè ñïàòü, øêîëüíèê');

o  ServerBtn. Tag:=0;

o  ServerBtn. Caption:='Ñîçäàòü';

o  end;

o  end;

o  procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;

o  Socket: TCustomWinSocket);

o  begin

o  ChatMemo. Lines. Add('Bot: Êëèåíò íà ïðîâîäå');

o  end;

o  procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;

o  Socket: TCustomWinSocket);

o  begin

o  ChatMemo. Lines. Add('Bot: Êëèåíò ïîëîæèë òðóáêó');

o  end;

o  procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

o  Socket: TCustomWinSocket);

o  begin

o  ChatMemo. Lines. Add(Socket. ReceiveText());

o  end;

o  procedure TForm1.SendBtnClick(Sender: TObject);

o  begin

o  If ServerSocket1.Active=True then

o  ServerSocket1.Socket. Connections[0].SendText(' '+NikEdit. Text+': '+TextEdit. Text)

o  else

o  ClientSocket1.Socket. SendText(' '+NikEdit. Text+': '+TextEdit. Text);

o  ChatMemo. Lines. Add(''+NikEdit. Text+': '+TextEdit. Text);

o  end;

o  procedure TForm1.ClientBtnClick(Sender: TObject);

o  begin

o  If ClientBtn. Tag=0 then

o  Begin

o  ServerBtn. Enabled:=False;

o  HostEdit. Enabled:=False;

o  PortEdit. Enabled:=False;

o  ClientSocket1.Port:=StrToInt(PortEdit. Text);

o  ClientSocket1.Host:=HostEdit. Text;

o  ClientSocket1.Address:=HostEdit. Text;

o  ClientSocket1.Active:=True;

o  ClientBtn. Tag:=1;

o  ClientBtn. Caption:='Îòêëþ÷èòüñÿ';

o  end

o  else

o  Begin

o  ServerBtn. Enabled:=True;

o  HostEdit. Enabled:=True;

o  PortEdit. Enabled:=True;

o  ClientSocket1.Active:=False;

o  ChatMemo. Lines. Add('Bot: Áàçàð çàêðûò');

o  ClientBtn. Tag:=0;

o  ClientBtn. Caption:='Ïîäêëþ÷èòüñÿ';

o  end;

o  end;

o  procedure TForm1.ClientSocket1Read(Sender: TObject;

o  Socket: TCustomWinSocket);

o  begin

o  ChatMemo. Lines. Add(Socket. ReceiveText());

o  end;

o  procedure TForm1.ClientSocket1Connect(Sender: TObject;

o  Socket: TCustomWinSocket);

o  begin

o  ChatMemo. Lines. Add('Bot: Òû ïîäêëþ÷èëñÿ');

o  end;

o  procedure TForm1.ClientSocket1Disconnect(Sender: TObject;

o  Socket: TCustomWinSocket);

o  begin

o  ChatMemo. Lines. Add('Bot: ÒÛ ÍÅ ÏÎÂÅÐÈØÜ, íî òû îòêëþ÷èëñÿ');

o  end;

o  end.

Скриншот работы программы:

Рисунок 1 – Передача сообщений в обе стороны

4.2 Создание программы для передачи массивов

Код программы:

·  const

·  n=5;

·  var

·  Form1: TForm1;

·  i, j:integer;

·  a:array [0..n,0..n] of integer;

·  Buf:array [0..24] of string;

·   

·  implementation

·   

·  {$R *.dfm}

·   

·   

·  procedure TForm1.FormCreate(Sender: TObject);

·  begin

·  PortEdit. Text:='777';

·  HostEdit. Text:='127.0.0.1';

·  NikEdit. Clear;

·  TextEdit. Clear;

·  end;

·   

·  procedure TForm1.ServerBtnClick(Sender: TObject);

·  begin

·  If ServerBtn. Tag=0 then

·  Begin

·  ClientBtn. Enabled:=False;

·  HostEdit. Enabled:=False;

·  PortEdit. Enabled:=False;

·  ServerSocket1.Port:=StrToInt(PortEdit. Text);

·  ServerSocket1.Active:=True;

·  ServerBtn. Tag:=1;

·  ServerBtn. Caption:='Çàêðûòü';

·  end

·  else

·  Begin

·  ClientBtn. Enabled:=True;

·  HostEdit. Enabled:=True;

·  PortEdit. Enabled:=True;

·  ServerSocket1.Active:=False;

·  ServerBtn. Tag:=0;

·  ServerBtn. Caption:='Ñîçäàòü';

·  end;

·  end;

·   

·  procedure TForm1.SendBtnClick(Sender: TObject);

·  begin

·  If ServerSocket1.Active=True then

·  ServerSocket1.Socket. Connections[0].SendText(' '+NikEdit. Text+': '+TextEdit. Text)

·  else

·  ClientSocket1.Socket. SendText(' '+NikEdit. Text+': '+TextEdit. Text);

·  end;

·   

·  procedure TForm1.ClientBtnClick(Sender: TObject);

·  begin

·  If ClientBtn. Tag=0 then

·  Begin

·  ServerBtn. Enabled:=False;

·  HostEdit. Enabled:=False;

·  PortEdit. Enabled:=False;

·  ClientSocket1.Port:=StrToInt(PortEdit. Text);

·  ClientSocket1.Host:=HostEdit. Text;

·  ClientSocket1.Address:=HostEdit. Text;

·  ClientSocket1.Active:=True;

·  ClientBtn. Tag:=1;

·  ClientBtn. Caption:='Îòêëþ÷èòüñÿ';

·  end

·  else

·  Begin

·  ServerBtn. Enabled:=True;

·  HostEdit. Enabled:=True;

·  PortEdit. Enabled:=True;

·  ClientSocket1.Active:=False;

·  ClientBtn. Tag:=0;

·  ClientBtn. Caption:='Ïîäêëþ÷èòüñÿ';

·  end;

·  end;

·   

·  procedure TForm1.Button2Click(Sender: TObject);

·  begin

·  for j:=0 to n do

·  begin

·  for i:=0 to n do

·  begin

·  a[i, j]:=random(15);

·  StringGrid1.Cells[j, i]:=IntToStr(a[i, j]);

·  end;

·  end;

·  end;

·   

·  procedure TForm1.Button1Click(Sender: TObject);

·  begin

·  Buf[0]:=StringGrid1.Cells[0,0];

·  Buf[1]:=StringGrid1.Cells[0,1];

·  Buf[2]:=StringGrid1.Cells[0,2];

·  Buf[3]:=StringGrid1.Cells[0,3];

·  Buf[4]:=StringGrid1.Cells[0,4];

·  Buf[5]:=StringGrid1.Cells[1,0];

·  Buf[6]:=StringGrid1.Cells[1,1];

·  Buf[7]:=StringGrid1.Cells[1,2];

·  Buf[8]:=StringGrid1.Cells[1,3];

·  Buf[9]:=StringGrid1.Cells[1,4];

·  Buf[10]:=StringGrid1.Cells[2,0];

·  Buf[11]:=StringGrid1.Cells[2,1];

·  Buf[12]:=StringGrid1.Cells[2,2];

·  Buf[13]:=StringGrid1.Cells[2,3];

·  Buf[14]:=StringGrid1.Cells[2,4];

·  Buf[15]:=StringGrid1.Cells[3,0];

·  Buf[16]:=StringGrid1.Cells[3,1];

·  Buf[17]:=StringGrid1.Cells[3,2];

·  Buf[18]:=StringGrid1.Cells[3,3];

·  Buf[19]:=StringGrid1.Cells[3,4];

·  Buf[20]:=StringGrid1.Cells[4,0];

·  Buf[21]:=StringGrid1.Cells[4,1];

·  Buf[22]:=StringGrid1.Cells[4,2];

·  Buf[23]:=StringGrid1.Cells[4,3];

·  Buf[24]:=StringGrid1.Cells[4,4];

·  If ServerSocket1.Active=True then

·  ServerSocket1.Socket. Connections[0].SendBuf(Buf,25)

·  else

·  ClientSocket1.Socket. SendBuf(Buf,25);

·  StringGrid2.Cells[0,0]:=Buf[0];

·  StringGrid2.Cells[0,1]:=Buf[1];

·  StringGrid2.Cells[0,2]:=Buf[2];

·  StringGrid2.Cells[0,3]:=Buf[3];

·  StringGrid2.Cells[0,4]:=Buf[4];

·  StringGrid2.Cells[1,0]:=Buf[5];

·  StringGrid2.Cells[1,1]:=Buf[6];

·  StringGrid2.Cells[1,2]:=Buf[7];

·  StringGrid2.Cells[1,3]:=Buf[8];

·  StringGrid2.Cells[1,4]:=Buf[9];

·  StringGrid2.Cells[2,0]:=Buf[10];

·  StringGrid2.Cells[2,1]:=Buf[11];

·  StringGrid2.Cells[2,2]:=Buf[12];

·  StringGrid2.Cells[2,3]:=Buf[13];

·  StringGrid2.Cells[2,4]:=Buf[14];

·  StringGrid2.Cells[3,0]:=Buf[15];

·  StringGrid2.Cells[3,1]:=Buf[16];

·  StringGrid2.Cells[3,2]:=Buf[17];

·  StringGrid2.Cells[3,3]:=Buf[18];

·  StringGrid2.Cells[3,4]:=Buf[19];

·  StringGrid2.Cells[4,0]:=Buf[20];

·  StringGrid2.Cells[4,1]:=Buf[21];

·  StringGrid2.Cells[4,2]:=Buf[22];

·  StringGrid2.Cells[4,3]:=Buf[23];

·  StringGrid2.Cells[4,4]:=Buf[24];

·   

·  end;

·   

·  end.

Скриншот работы программы:

Рисунок 2 – Отправление массива

Вывод

В ходе выполнения этой лабораторной работы я понял как создавать программу в среде Delphi для обмена сообщениями на основе компонентов TClientSocket и TServerSocket, узнал, какие свойства есть у этих компонентов.

Список использованных источников

1 СТО .. Работы студенческие. Общие требования и правила оформления. – Взамен СТП 101-00; введен . .– М. : ОГУ, 2011. – 92 с.