Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
30.04.2019
Размер:
78.85 Кб
Скачать

Примечание:

Передаваемый в качестве параметра последних двух функций лоток данных AStream переходит "под надзор" объекта TServerWinSocket и удаляется им по мере пересылки. Программист не должен предпринимать попыток удалить AStream после вызова методов SendStream или SendStreamThenDrop.

При помощи метода:

function GetClientThread(ClientSocket: TServerClientWinSocket): TServerClientThread;

можно получить указатель на поток, занимающийся обслуживанием кон­кретного сокета.

События:

property OnClientConnect;

property OnClientDisconnect;

property OnClientRead;

property OnClientWrite;

имеют одинаковый тип:

TSocketNotifyEvent = procedure (Sender: TObject; Socket:

TCustomWinSocket) of object;

Они происходят при соединении/отключении от клиента, а также при чте­нии и записи. Если произошла ошибка, возникает событие:

property OnClientError: TSocketErrorEvent;

TErrorEvent = (eeGeneral/ eeSend, eeReceive, eeConnect, eeDisconnect, eeAccept) ;

TSocketErrorEvent = procedure (Sender: TObject; Socket: TCustomWin-

Socket; ErrorEvent: TErrorEvent; var ErrorCode: Integer) of object;

Параметры его имеют следующее назначение. ErrorEvent указывает на тип операции, во время которой произошла ошибка. При этом ErrorCode со­держит код ошибки Windows. Если вы сами обработали ошибку и не хотите дальнейших действий по ее обработке со стороны системы, нужно устано­вить параметр ErrorCode в 0.

Компонент tServerSocket

Самое главное свойство этого компонента - уже упоминавшаяся ссылка на объект:

property Socket: TServerWinSocket;

Именно через него доступны все функциональные возможности сокета. Компонент же создан только для того, чтобы опубликовать необходимые свойства и события. В нем имеются свои события OnClientConnect, OnClientDisconnect, OnClientRead, OnClientWrite, OnClientError, но они не самостоятельны, а только отсылают к соответствующим событиям объекта TServerWinSocket. Также обстоит дело и со свойствами ServerType и ThreadCacheSize.

Дополнительно в компоненте предусмотрены события:

property OnListen: TSocketNotifyEvent; - происходит после того, как заданы адрес и порт сокета и перед тем, как он включается в режим про­слушивания (готовности к соединению)

property OnAccept: TSocketNotifyEvent; - происходит непосредствен­но после установки соединения.

Свойство property Active: Boolean; отвечает за состояние сокета. Для клиентского сокета изменение его значения соответствует подключе­нию/отключению от сервера. Для серверного - включение/выключение со­стояния прослушивания. Использование этого свойства равносильно при­менению следующих методов:

procedure Open;

procedure Close;

Свойство

property Service: string;

пригодится для идентификации предназначения сокета. Здесь должно хра­ниться символьное имя сервиса, для которого используется сокет (ftp, http, telnet и др.)

Объект tClientWinSocket

Многие из событий и методов этого объекта уже описаны выше (см. объект TServerWinSocket), так как они имеют общего предка. Но есть и различия, требующие комментария. Как и серверный, клиентский сокет может быть двух типов:

type TClientType = (ctNonBlocking, ctBlocking) ;

property ClientType: TClientType;

В отличие от сервера, в блокировке клиента большой беды нет. Если установ­лен режим ctBlocking, клиентское приложение блокируется до завершения операции. Если это вас пугает, отдельный поток для работы с сокетом в ре­жиме ctBlocking предлагается создать самому. В режиме ctNonBlocking опе­рации выполняются асинхронно.

Соседние файлы в папке ПИУС