.
Tuesday 22nd of May 2012    

Информация

Счетчики

Голосование

Лучшая марка телефона
 

Реклама

фильмы онлайн

фильмы онлайн


Серверное приложение
загрузка...

Для большей наглядности процесса обмена данными создадим приложение синтерфейсом MDI. Задумка такова: при обслуживании заявки от очередного сокета-клиента мы создаем новое дочернее окно и выводим в нем получаемые от клиента данные.

Как всегда начнем с главной формы проекта. Измените ее имя на Name: =frm-Main и укажите, что это главное окно проекта MDI (FormStyle := fsMDIForm). Разместите на главной форме два компонента: сокет-сервер TTCPServer (ком-

понент находится на странице Internet палитры компонентов) и строку состояния TStatusBar, из которой пользователь сможет узнать адрес сервера. Вызовите редактор панелей строки (например, дважды щелкнув по элементу управления StatusBar1) и создайте три панели. Теперь обратитесь к событию OnCreate() главной формы и внесите в него следующий код:

procedure TfrmMain.FormCreate(Sender: TObject); begin

with TcpServer1 do

begin

BlockMode:=bmThreadBlocking;

LocalPort: = '70000';

Open;

StatusBar1.Panels[0].Text:='Хост: '+LocalHostName; StatusBar1.Panels[1].Text:='Порт: '+LocalPort; StatusBar1. Panels^.Text^'IP-адрес : '+LocalHostAddr; end; end;

В момент создания главной формы приложения инициируется номер порта и назначается режим блокировки. Обратите внимание, что мы явным образом не присваиваем значение свойству LocalHost; в этом случае в качестве имени хоста будет назначено сетевое имя компьютера.

К главной форме мы еще вернемся, а пока создадим новую дочернюю MDI-форму: Name:=frmChild и стиль FormStyle := fsMDIChild.

Исключите дочернюю форму из списка автоматически создаваемых (пункт меню Project -— Options, вкладка Forms). Перенесите на форму компонент TMemo, в котором будет протоколироваться процесс обмена данными с клиентом. Перейдите в редактор кода дочерней формы и в секции public объявите поле Th read : TThread, где будет храниться ссылка на связанный с дочерней формой поток обслуживания. Эта ссылка нужна для того, чтобы избежать случайного закрытия формы пользователем до разрыва соединения. Перед вами полный листинг дочерней формы:

unit ChildUnit;

interface

uses Windows, SysUtils, Variants, Classes, Controls, Forms, StdCtrls; type

TfrmChild = class(TForm)

Memo1: TMemo;

procedure FormClose(Sender: TObject; var Action: TCloseAction); private

{ Private declarations }

public

{ Public declarations } Thread : TThread; end;

implementation

{$R *.dfm}

procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction); begin

if NOT Assigned(Thread) then Action:=caFree else Action:=caNone;

end;

end.


загрузка...
 

Самое популярное:

bottom

карта сайта