.
Wednesday 23rd of May 2012    

Информация

Счетчики

Голосование

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

Реклама

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

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


виртуальный метод
загрузка...

Для разрыва соединения заложен виртуальный метод:

procedure Close; virtual; Разрыв соединения сопровождается событием:

property OnDestroyHandle: TSocketNotifyEvent; О готовности соединения можно судить по состоянию свойства:

property Active: Boolean;

Кроме того, это свойство доступно в Инспекторе объектов. Тем самым разработчик может включать и отключать сокет в процессе моделирования проекта. Физическое уничтожение экземпляра класса с освобождением используемой памяти производится стандартным деструктором Destroy(). Проверка готовности сокета к передаче или приему данных производится методом:

function WaitForData(TimeOut: Integer = 0): boolean;

В течение времени тайм-аута TimeOut функция ожидает готовности сокета. В случае успеха, не дожидаясь истечения установленного времени, WaitFor-Data() немедленно возвратит значение true. Функция WaitForData() представляет собой упрощенный вызов более серьезного метода:

function Select(ReadReady, WriteReady, ExceptFlag: PBoolean; TimeOut: Integer = 0): boolean;

Это так называемый тест активности сокета. Метод производит более тонкую проверку сокета. Он позволяет уточнить информацию о готовности со-кета для операций чтения (параметр ReadReady) и записи (WriteReady), а также наличие связанных с сокетом исключительных ситуаций (ExceptFlag).

Для отправки корреспонденту информации в базовый класс заложено два ключевых метода:

function SendBuf(var buf; bufsize: integer; flags: integer = 0): integer; dynamic;

function SendStream(AStream: TStream): Integer;

Функция SendBuf() передает данные из буфера buf размером bufsize. Флаг flags необходим только для работы под управлением ОС Linux, так что оставляйте значение по умолчанию. Второй метод SendStream() специализируется на передаче данных из памяти (размещенных в потоке AStream). Над методом SendBuf() существует надстройка для работы с текстовыми данными:

function Sendln(s: string; const eol: string = CRLF): integer;

Этот метод предназначен для отправки строки s. Второй параметр метода eol определяет разделительный символ. Рассматриваемый метод вызывает функцию SendBuf() и заполняет передающий буфер порцией данных до символа-разделителя.

Задачу получения данных решают схожие по параметрам методы:

function ReceiveBuf(var buf; bufsize: integer; flags: integer = 0): integer; dynamic; function Receiveln(eol: string = CRLF): string;

Для копирования содержащихся в буфере данных может пригодиться метод PeekBuf(). Эта функция может применяться совместно с методами SendBuf() и ReceiveBuf().

function PeekBuf(var buf; bufsize: integer): integer; dynamic;

Процессы отправки и получения данных нашли отражение в двух событиях:

property OnSend: TSocketDataEvent; property OnReceive: TSocketDataEvent;

Событие OnSend() генерируется перед передачей данных. Напротив, событие OnRecive() возникает только после получения данных сокетом. Оба события могут использоваться для дополнительной обработки информации, например для форматирования, и описываются однотипной процедурой:

type TSocketDataEvent = procedure (Sender: TObject; Buf: pChar; var DataLen: integer) of object;

Здесь Sender - ссылка на компонент-сокет, Buf - буфер, содержащий передаваемые (или принимаемые) данные, и DataLen - количество байт данных в буфере. Счетчики количества отправленных и принятых байт данных доступны из свойств:

property BytesReceived: cardinal; property BytesSent: cardinal;

В заключение упомяну о наличии у базового класса реакции на исключительные ситуации. Код ошибки окажется в параметре SocketError.

property OnError: TSocketErrorEvent;

type TSocketErrorEvent = procedure (Sender: TObject; SocketError: Integer) of object;

Сетевая поддержка сокетов - класс TIPSocket

Класс TIPSocket является прямым наследником TBaseSocket и осуществляет сетевую поддержку технологии WinSock. Для этого в классе инкапсулированы методы протоколов TCP/IP и UDP, а также ряда частных протоколов. Как ив случае с TBaseSocket, класс TIPSocket - всего лишь прототип для компонентов более высокого уровня и в виде самостоятельного объекта не применяется.


загрузка...
 

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

Наши партнеры

bottom

карта сайта