л.р (Интерфейсы периферийных устройств) / лаба 3
.docxМинистерство образования и науки РФ
Федеральное государственное бюджетное
образовательное учреждение
высшего профессионального образования
«Белгородский государственный технологический университет
им. В.Г.Шухова»
Губкинский филиал
ЛАБОРАТОРНАЯ РАБОТА №3
по предмету: «Интерфейсы периферийных устройств »
Выполнил студент: Бодриков
Евгений Павлович
Группа: БИВТ-31сз
Направление: 230100.62
Информатика и вычислительная техника
Проверил: Черных В.А.
г.Губкин 2014г
Задание:
Написать программу обмена информацией между двумя ПК по средствам протокола tcpip
Код программы:
Клиент:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdIPWatch, ScktComp;
type
TForm2 = class(TForm)
ClientSocket1: TClientSocket;
IdIPWatch1: TIdIPWatch;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Edit2: TEdit;
Button3: TButton;
Edit3: TEdit;
Label2: TLabel;
Memo1: TMemo;
Edit4: TEdit;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
// procedure Button3Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
ClientSocket1.Port:= StrToInt(Edit3.Text);
ClientSocket1.Address := Edit1.Text; {Адрес сервера}
if not ClientSocket1.Active then begin
ClientSocket1.Active := True;
Form2.Caption:= 'Клиент подключен'; end;
end;
procedure TForm2.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
If Edit1.Text <> '' then
ClientSocket1.Socket.SendText(Edit1.text);
Edit1.Text := '';
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
ClientSocket1.Active := False; {Выключаем клиента}
ClientSocket1.Close; {Закрываем сокет}
Close;
end;
Сервер:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdIPWatch, ScktComp;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
IdIPWatch1: TIdIPWatch;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Caption:='Сервер активен'+ IdIPWatch1.LocalIP;
ServerSocket1.Active := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Active := False;
ServerSocket1.Close;
Close;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
S: String;
I: Integer;
begin
{Добавляем к строке сообщения клиента идентификатор его сокета}
S := Socket.ReceiveText;
ListBox1.Items.Add(S); {Добавляем сообщение в список}
{Перебираем все установленные соединения}
For i := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
{Проверяем - если идентификатор очередного сокета не совпадает
с идентификатором сокета, приславшего сообщение, то...}
if ServerSocket1.Socket.Connections[i].SocketHandle <> Socket.SocketHandle then
{... посылаем очередной клиентской программе новое сообщение}
ServerSocket1.Socket.Connections[i].SendText(S);
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdIPWatch, ScktComp;
type
TForm2 = class(TForm)
ClientSocket1: TClientSocket;
IdIPWatch1: TIdIPWatch;
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
Edit2: TEdit;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
// procedure Button3Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormDestroy(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := Edit1.Text; {Адрес сервера}
if not ClientSocket1.Active then
ClientSocket1.Active := True;
end;
procedure TForm2.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Listbox1.Items.Add(Socket.ReceiveText);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
If Edit1.Text <> '' then
ClientSocket1.Socket.SendText(Edit1.text);
Edit1.Text := '';
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
ClientSocket1.Active := False; {Выключаем клиента}
ClientSocket1.Close; {Закрываем сокет}
Close;
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
If Edit2.Text <> '' then
ClientSocket1.Socket.SendText(Edit2.text); {..посылаем его на сервер}
Edit2.Text := '';
end;
end.