Процесс обучения учащихся информатике в общеобразовательной школе в условиях инновационной образовательной среды

Используя объект типа TserverSocket, реализуйте передачу данных клиенту. Для передачи строки по установленному ТСР/IР-соединению используется метод SendText. Введите в созданный обработчик события следующий код для всех двенадцати сокетов:

if form1.ServerSocket1.Socket.ActiveConnections=1 then

form1.ServerSocket1.Socket.Connections[0].SendText(text);

После выполнения этих действий д

ля приложения-клиента будет инициировано событие OnRead.

Используя объект типа TserverSocket, реализуйте получение данных на стороне сервера. Для этого создайте для компонента ServerSocketl обработчик события OnClientRead. Это событие будет инициализировано при передаче по установленному соединению данных с клиента. Введите в созданный обработчик события код, принимающий передаваемые данные. Метод ReceiveText принимает данные, переданные объекту Socket. Например, следующий код отображает принимаемые данные в компоненте типа ТМеmо:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

var s:string;

begin

s:=ServerSocket1.Socket.Connections[0].ReceiveText;

if copy(s,1,2)='20' then

memo1.Lines.Add(copy(s,4,length(s))) else

if copy(s,1,2)='21' then

begin name1.Text:=copy(s,4,length(s));

memo1.Lines.Clear;

end;

Для загрузки теста из заранее написанного текстового документа была создана следующая процедура:

procedure TForm1.N2Click(Sender: TObject);

var s:string;

i,j1,j2:integer;

begin

getdir(0,s);

OpenDialog1.InitialDir:=s; //диалог открытия теста

if OpenDialog1.Execute then //если нажата кнопка ОК

begin

assignfile(FileTest,OpenDialog1.FileName);

reset(FileTest);// открытие файла теста для чтения

j1:=1;

j2:=0;

readln(FileTest,s); //чтение из файла

while not eof(filetest) do // пока файл не окончен

begin readln(FileTest,s); inc(j1); end; //счетчик записей в файле

closefile(filetest); // закрытие файла

ProcessDlg.ProgressBar1.Position:=0;//на основании j1 заполняется прогресбар

ProcessDlg.Label1.Caption:='Загрузка теста .';

ProcessDlg.Show;

ProcessDlg.Refresh;

SendTxt('10/'); //отправка сообщения клиенту о начале передачи теста

Ansved(); //получение ответа от клиента

reset(FileTest); //открытие файла для чтения

readln(FileTest,s); //чтение из файла

SendTxt('11/'+s); //отправка заголовка теста

inc(j2);

ProcessDlg.ProgressBar1.Position:=trunc(j2/j1*100);

readln(FileTest,s);

Ansved();

SendTxt('12/'+s); //отправка времени на ответ

inc(j2);

ProcessDlg.ProgressBar1.Position:=trunc(j2/j1*100);

readln(FileTest,s);

Ansved();

SendTxt('13/'+s); //отправка количества вопросов

inc(j2);

ProcessDlg.ProgressBar1.Position:=trunc(j2/j1*100);

while not eof(filetest) do //непосредственная отправка вопросов

begin

readln(FileTest,s);

Ansved();

SendTxt('14/'+s); //отправка вопросов и ответов

inc(j2);

ProcessDlg.ProgressBar1.Position:=trunc(j2/j1*100);

end;

Ansved();

SendTxt('15/'); //окончание теста

inc(j2);

ProcessDlg.ProgressBar1.Position:=trunc(j2/j1*100);

closefile(filetest); //закрытие файла теста

ProcessDlg.Hide; //закрытие диалога

end;

end;

На этом этапе создание сокета со стороны сервера завершено.

Создание клиентской части сетевого теста

Для того чтобы создать клиента, использующего сокет TCP/IP для реализации сетевого соединения, необходимо выполнить следующие действия:

Создайте новое приложение и расположите на главной форме компонент TClientSocket со страницы Internet палитры компонентов. Этот компонент используется для реализации TCP/IP-соединения со стороны клиента.

Рисунок 29. Главное окно клиентской части тестовой оболочки

Создайте объекты, используемые для хранения передаваемых и принимаемых значений. Расположите на форме пять полей типа ТМето (одно для отображения получаемых вопросов теста, остальные - для отображения получаемых вариантов ответа), четыре компонента CheckBox, две кнопки, компонент таймер, компонент MainMenu, компонент типа TXPManifest (для обеспечения совместимости интерфейса тестовой оболочки с интерфейсом операционной системы Windows XP), три компонента типа TLabel (один – для названия теста, второй – для текстового комментария о количестве оставшегося времени, третий – для числового выражения оставшегося на вопрос времени).

Создайте еще одну форму для активации клиента, используя стандартные диалоги.

Рисунок 30. Окно авторизации

Напишите код, выполняющий установление соединения с сервером. Сначала следует определить, открыто ли соединение, и если соединение открыто, то закрыть его. Если значение свойства Active сокета равно True, то соединение открыто. Открыть соединение можно, или установив это свойство равным True, или вызвав для объекта сокет метод Open. Закрыть соединение можно, или установив свойство Active равным False, или вызвав для объекта сокет метод Close. В обработчик события OnShow формы введите следующую процедуру:

procedure TNameDlg.FormShow(Sender: TObject);

var par: file of shortstring;

s: string;

p: shortstring;

begin

Label3.Visible:=false;

edit1.Text:=sname;

form1.ClientSocket1.Active:=false;

getdir(0,s);

assignfile(par,s+'\par.par'); // открытие файла параметров

reset(par); // открытие файла для чтения

read(par,p);

form1.ClientSocket1.Host:=p; // присвоение адреса сервера

form1.ClientSocket1.Address:=p; //присвоение адреса сервера

read(par,p);

form1.ClientSocket1.Port:=StrToInt(p);//присвоение номера порта

closefile(par);

form1.ClientSocket1.Active:=true; //активация клиента

end;

Далее следует создать форму с запросом IP-адреса подключаемого сервера и порта клиента.

Рисунок 31. Окно параметров

Во избежание повторного ввода этих данных при следующем запуске приложения была создана процедура, в которой после первой записи IP-адреса центрального компьютера и номера порта происходит сохранение этих данных в файле (par.par) в текущем каталоге.

procedure TForm1.N4Click(Sender: TObject);

var par: file of shortstring;

s: string;

p: shortstring;

begin

ParDlg.ShowModal; //запуск окна параметров

if ParDlg.ModalResult=mrok then //нажата кнопка ОК

begin ClientSocket1.Active:=false;

getdir(0,s); //получение адреса текущей папки

assignfile(par,s+'\par.par');

rewrite(par);

p:=ParDlg.Edit1.Text;

write(par,p);

p:=ParDlg.Edit2.Text;

write(par,p);

closefile(par)

end;

end;

Создайте код, выполняющий получение данных на стороне клиента. Для этого создайте для компонента ClientSocket1 обработчик события OnRead, Метод ReceiveText принимает данные, переданные объекту Socket.

Страница:  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
 16  17  18  19  20  21  22  23  24 


Другие рефераты на тему «Педагогика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы