Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Программирование на Delphi

GND. Следует также отметить, что параметр метода является  записью
типа tWMEraseBkgnd.


type TWMEraseBkgnd=record

Msg:Cardinal;

DC:HDC;

Unused:Longint;

Result:Longint;

end;
В VCL имеются записи для большинства сообщений Windows®  (они  определены  в
модуле Messages.pas). Именем записи является имя сообщения с префиксом  t  и
без подчеркивания. Сам метод можно назвать как угодно, но  приведенная  выше
форма является общепринятой. В этом методе  может  возникнуть  необходимость
вызвать  обработчик  сообщения,  установленный  по  умолчанию.   Для   этого
необходимо вызвать виртуальный метод класса tObject DefaultHandler:


procedure tObject.DefaultHandler(var Message); virtual;
Помимо  нормальных  сообщений  Windows®,  можно  создать  свое   собственное
сообщение.  еализация  и  перехват  определяемого  пользователем   сообщения
идентичны обработке сообщений Windows®. Единственное отличие состоит в  том,
что это сообщение необходимо сначала определить:


Const My_Message = WM_USER + 1;
Эта строка объявляет пользовательское сообщение с именем My_Message.
Для  обработки  сообщений,  определенных  пользователем  в   качестве   типа
параметра обработчика сообщения  следует  использовать  запись  общего  вида
tMessage:


type tMessage = record

Msg:Cardinal;

WParam:Longint;

LParam:Longint;

Result:Longint;

end;
Здесь, как и во всех других определенных в VCL для сообщений  записях,  поле
Msg определяет передаваемое сообщение,  поле  Result  -  результат  действия
обработчика. Уникальные для данной записи  поля  WParam  и  LParam  содержат
соответствующие параметры сообщения.
Для посылки определяемых пользователем сообщений можно использовать  функции
SendMessage,  PostMessage,  однако,   предпочтительнее   в   данном   случае
использовать Perform.
Сокеты
Наиболее современным и даже "модным" является общение  процессов  на  уровне
сокетов.  Популярность  их  обусловлена   взрывным   ростом   интереса   как
пользователей, так и специалистов к Internet и всему,  что  связано  с  этой
сетью.
Общепринятой  и   стандартизованной   на   международном   уровне   является
семиуровневая модель структуры  протоколов  связи  под  названием  интерфейс
открытых систем (Open Systems Interface, OSI). На каждом  из  уровней  —  от
первого,  физического,  до  высших  уровней  представления  и  приложений  —
решается свой объем задач и используется свой инструментарий.
Сокеты находятся как  раз  на  промежуточном,  так  называемом  транспортном
уровне семиуровневой структуры. "Под  ним",  на  сетевом  уровне,  находится
протокол  IP  (основа  TCP/IP  —  Transmission   Control   Protocol/Internet
Protocol).  Над  ним  находятся  протоколы  сеансового   уровня   (сервисы),
ориентированные на конкретные задачи — например, FTP (для передачи  файлов),
SMTP (почтовый), всем  известный  гипертекстовый  протокол  HTTP  и  другие.
Использование  сокетов,  с  одной  стороны,  позволяет  абстрагироваться  от
частностей работы на нижних уровнях, с другой — решать широкий  круг  задач,
недоступный специализированным протоколам.
С точки зрения своей сущности сокет  —  это  модель  одного  конца  сетевого
соединения, со своими свойствами и возможностью читать и записывать  данные.
С точки зрения содержания — это прикладной программный  интерфейс,  входящий
в состав разных операционных систем, в том числе Windows — начиная с  версии
3.11.  Последняя  его  реализация  носит  название  WinSock  2.0.  Прототипы
функций содержатся в файле WINSOCK.PAS, поставляемом с Delphi.
API сокетов впервые появился в среде Unix  и  стал  популярен  вместе  с  (и
благодаря) протоколом TCP/IP. Именно они являются  строительным  материалом,
из которого построена сеть Internet. Но сокеты не обязательно базируются  на
TCP/IP, они могут базироваться на IPX/SPX и других протоколах.
Механизм соединения при помощи сокетов таков.  На  одной  стороне  создается
клиентский  сокет.  Для  инициализации  связи  ему  нужно  задать   путь   к
серверному сокету, с которым предстоит установить соединение.
Путь в сети задается двумя параметрами: адресом или равноценным  ему  именем
хоста, или просто хостом и номером порта. Хост  —  это  система,  в  которой
запущено приложение, содержащее сокет. Неверно приравнивать  понятие  "хост"
или "адрес" к понятию  "компьютер"  —  у  компьютера  может  быть  несколько
сетевых устройств  и  несколько  адресов.  Адрес  в  сетях  TCP/IP  задается
четверкой  чисел  в   диапазоне   0..255,   например,   так:   192.168.99.1.
Естественно, каждый адрес даже в рамках Internet уникален — за  этим  следит
специальная организация.  Имя  хоста,  как  правило,  —  символьная  строка,
поставленная в соответствие адресу и записанная по  правилам  UNC,  например
http://www.microsoft.com. Взаимное соответствие  между  именами  и  адресами
может  осуществляться  по-разному,  в  зависимости  от   масштаба   сети   и
применяемой  ОС.  В  Internet  существует  система  имен  доменов  (DNS)   —
специальные серверы, хранящие и поддерживающие  таблицы  соответствия  между
символьным именем  и  адресом.  Но  в  любом  случае  соединение  по  адресу
быстрее, так как не нужно обращаться за дополнительной информацией.
В случае, если ваши клиент/серверные приложения отлаживаются на одной и  той
же машине, можно связать сокеты четырьмя способами:
    . Указанием сетевого имени вашего компьютера  (узнать  его  можно  через
      апплет "Сеть" Панели управления)
    . Указанием IP — адреса вашего компьютера (узнать его можно в  свойствах
      протокола ТСР/IP: на машине должен  стоять  этот  протокол  и  иметься
      постоянный IP-адрес)
    . Указанием имени localhost, указывающего, что сервер находится  на  том
      же компьютере
    . Указанием IP-адреса 127.0.0.1, указывающего на тоже самое
Номер порта —  простое  средство  для  поддержания  одновременно  нескольких
связей  между  двумя  хостами.  Это  число,  обычно  зарезервированное   для
протоколов более высокого уровня. Так, для протокола FTP  выделен  порт  21,
SMTP —  25,  популярная  игра  Quake  II  использует  порт  27910  и  т.  п.
Программист должен ознакомиться со списком уже закрепленных  портов,  прежде
чем установит и использует свое значение.
С одной из двух вступающих  в  связь  сторон  запускается  серверный  сокет.
Первоначально он находится в состоянии  просушивания  (listening),  то  есть
ожидания связи. После получения  запроса  от  другой  стороны  —  клиента  —
устанавливается  связь.  Но  в  то  же  время  создается  новый  сокет   для
продолжения прослушивания.
Естественно, в составе Delphi имеется полноценная поддержка сокетов.  Еще  в
версии 2 появился заголовочный файл WINSOCK.PAS. Есть  он  и  сейчас  —  для
желающих  использовать  API  WinSock  напрямую.  Мы  же   рассмотрим   здесь
компоненты TServerSocket и TClientSocket, имеющиеся в Delphi 4  на  странице
Internet Палитры компонентов.
Очень важным моментом в использовании сокетов является  задание  их  типа  —
блокирующего (синхронного) и  неблокирующего  (асинхронного).  По  существу,
работа с сокетами — не что иное, как операции ввода/вывода, которые, как  мы
знаем, также могут быть синхронными и асинхронными (отложенными).  В  первом
случае  при  вызове  функции  ввода/вывода  приложение  блокируется  до  его
окончания. Во втором  —  инициируется  ввод/вывод  и  выполнение  приложения
сразу  же  продолжается;  окончание  ввода/вывода  будет  "ознаменовано"   в
системе  возникновением  некоторого  события.  В  библиотеке   WinSock   2.0
поддерживаются оба типа операций с сокетами; соответственно,  в  компонентах
Delphi  также  можно  установить  нужный  тип.  Отвечают  за  него  свойства
serverType и clientType, о которых рассказано ниже.
Специфика компонентов TServerSocket и TClientSocket в том. что они  являются
"двухэтажными" надстройками над API сокетов. И у того, и у  другого  имеется
свойство:


property Socket: TClientWinSocket;
у компонента TClientSocket и


property Socket: TServerWinSocket;
у компонента TServerSocket
Это свойство представляет собой объект  —  собственно  оболочку  сокета,  со
всеми  функциями  поддержки  установления  соединения,  чтения   и   записи.
азделение труда между ними  такое—на  уровне  TServerSocket  (TClientSocket)
сосредоточены основные опубликованные свойства и события, обработку  которых
можно  запрограммировать;  на  уровне  TServerWinSocket   (TClientWinSocket)
следует искать функции, в том числе чтения и записи в сокет.
Объект TServerWinSocket
На уровне этого объекта ведется список соединений  с  клиентскими  сокетами,
содержащийся в свойстве:


property Connections [Index: Integer]: TCustomWinSocket;
Общее число соединений (и число  элементов  в  свойстве  connections)  равно
значению свойства:


property ActiveConnections: Integer;
Этим списком и счетчиком удобно  пользоваться  для  рассылки  всем  клиентам
какой-нибудь широковещательной информации, например:


for i:=0 to ServerSocket.Socket.ActiveConnections-1 do

ServerSocket.Socket.Connections[i].SendText('Hi! ');
Тип сервера (блокирующий/неблокирующий) задается свойством


type TServerType = (stNonBiocking, stThreadBiocking);

property ServerType: TServerType;
Поскольку сервер, который блокируется  каждым  чтением/записью,  представить
себе трудно, разработчики  фирмы  Inprise  пошли  таким  путем.  Блокирующий
режим заменен режимом  stThreadBlocking.  В  этом  случае  при  установлении
каждого нового соединения запускается отдельный программный  поток3  (объект
класса TServerclientThread). Он отвечает за связь с  отдельным  клиентом,  и
его блокировка не влияет на работу остальных соединений.
Если вы не х
Пред.678910След.
скачать работу

Программирование на Delphi

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ