ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Аэрокосмический институт
Кафедра систем автоматизации производства
ОТЧЕТ
по лабораторной работе №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 с.



