Шаг 50.
Компоненты TNMStrm и TNMStrmServ

    На этом шаге мы рассмотрим назначение компонентов TNMStrm и TNMStrmServ.

    Компоненты TNMStrm и TNMStrmServ применяются для обмена так называемыми потоками. Первый компонент применяется для клиентской программы, а второй - для сервера потоков. Если клиентская программа должна поддерживать и прием потоков, то в нее нужно добавить второй, серверный компонент. Ранее мы рассматривали пару компонентов TNMMsg и TNMMsgServ, которые используются для обмена текстовыми сообщениями. Компоненты, которые мы рассматриваем сейчас, также используются для обмена информацией, только область их применения несколько шире: данные могут быть не только текстового типа, но и двоичного. Эти компоненты могут использоваться для обмена любыми файлами, например, графическими или файлами данных и т.д. Как уже было сказано, эти компоненты обмениваются не самими файлами, а потоками (streams).

    Механизм потоков используется для работы с массивами данных, не обязательно организованными в файлы. В том числе это может быть буфер в памяти, длинная строка символов и т.д. Во всех этих случаях доступ к данным напоминает работу с файлом. Есть соответствующие методы для записи и чтения данных; поток имеет размер и указатель, который можно установить в нужное место и, начиная с этой позиции, производить запись или чтение данных. В Delphi имеются следующие классы потоков: TFileStream, TStringStream, TMemoryStream, TBlobStream и TWinSocketStream для работы с файловыми и строковыми потоками, потоками в динамической памяти, BLOB-потоками и сокетными соединениями соответственно. Все эти классы являются потомками класса TStream.

    Перед тем, как посылать поток, вы должны указать имя удаленного компьютера, на который вы собираетесь отправлять потоки. Кроме того нужно в свойстве Port указать порт, соответствующий порту сервера потоков. В свойстве FromName нужно указать свое имя, чтобы получатель знал, от кого пришли данные. Только после того, как заданы значения для этих свойств, вы можете послать поток методом PostIt, указав его в параметре sStrm. Если сервер получил поток без ошибок, то метод возвращает ОК в качестве ответа сервера. После отправки сообщения генерируется событие OnMessageSent.

    Если вы хотите изменить значение порта по умолчанию, который слушает ваш сервер потоков, то во время разработки приложения вы это можете сделать в Инспекторе Объектов, изменив значение свойства Port.

    Для обработки получаемых сервером потоков вам нужно написать обработчик события OnMSG, который вызывается, когда сервер получает очередной поток. Обработчик события имеет два параметра: параметр sFrom содержит имя отправителя сообщения, в параметре strm находится полученный поток. Помните, что после того, как вы выйдете из обработчика этого события, полученный поток будет потерян, поэтому вы обязательно должны взять данные из параметра strm и обработать их.

    На следующем шаге мы рассмотрим пример использования этих компонентов.




Предыдущий шаг Содержание Следующий шаг