.
Monday 21st of May 2012    

Информация

Счетчики

Голосование

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

Реклама

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

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


Базовый класс сокетов - TBaseSocket
загрузка...

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

Являясь наследником TComponent, класс TBaseSocket значительно расширяет унаследованный конструктор Create(). Все внесенные изменения нацелены на работу в сети и обслуживание процесса обмена данными между сокетами. Впрочем, прямой поддержки сетевых операций в классе нет (это задача TIP-

Socket), но в TBaseSocket объявлен ряд свойств, определяющих формат передаваемых сообщений и протокол обмена данными.

Как всегда при организации операций ввода/вывода порядок функционирования сокета в первую очередь определяется режимом блокировки (который вы предпочитаете): асинхронный или синхронный (или используя терминологию сокетов: неблокирующий (bmNonBlocking) и блокирующий (bmBlocking)).

property BlockMode : TSocketBlockMode;

type TSocketBlockMode = bmBlocking .. bmNonBlocking;

В базовом классе объявлено семейство протоколов, в которых потенциально готов работать сокет:

property Domain: TSocketDomain;

type TSocketDomain = (pfUnspec, pfUnix, pflnet, pflmpLink, pfPup, pfChaos, pflpx, pfNs, pflso, pfOsi, pfEcma, pfDataKit, pfCcitt, pfSna, pfDecNet, pfDli, pfLat, pfHylink, pfAppleTalk, pfVoiceView, pfFireFox, pfUnknownl, pfBan, pfMax);

Преобразование именованной константы класса TSocketDomain в соответствующий ей числовой код производится методом:

function MapDomain(sd: TSocketDomain): integer;

За определение формата, используемого при обмене данными информационного пакета, отвечает свойство:

property SockType : TSocketType;

Преобразование именованной константы класса TSocketType в соответствующий ей числовой код производится методом:

function MapSockType(st: TSocketType): integer;

Первые два типа сокетов (stStream и stDgram) поддерживались еще в старой версии Windows Sockets 1.1. Остальные типы доступны только начиная со второй версии WinSock.

Какой из протоколов применяется в работе сокета, определяется свойством:

property Protocol: TSocketProtocol;

По умолчанию это IP-протокол, однако перечень допустимых протоколов значительно больше. Наиболее популярные из них представлены в табл. 23.4.

Для инициализации соединения потомки класса TBaseSocket вызывают метод:

procedure Open; virtual;

Естественно, благодарные наследники метод изрядно доработают. Например, вызов Open() сервером (класс TTCPServer) переводит его в состояние прослушивания, а обращение к методу клиента (класс TTCPClient) ставит последнего в очередь на обслуживание. Но независимо от функционального наполнения метода в классах-потомках процесс выполнения метода будет сопровождаться генерацией события, сигнализирующего о создании сокета:

property OnCreateHandle: TSocketNotifyEvent;

type TSocketNotifyEvent = procedure (Sender: TObject) of object;

Обратите внимание, что компоненты, строящиеся на основе TBaseSocket, всего лишь инкапсулируют интерфейс WinSock. И до тех пор пока не будет произведен вызов метода Open(), эти компоненты - всего лишь пустая оболочка, хранящая данные, описывающие будущий сокет. В Delphi рождение настоящего сокета происходит как раз в рамках Open(). Для этого в недрах этой процедуры осуществляется обращение к методу Win32 APISocket(). Именно он произведет на свет настоящий сокет, инициируя его параметры значениями свойств соответствующего компонента VCL.


загрузка...
 

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

bottom

карта сайта