

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| Базовый класс сокетов - 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. |
