Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Обмен данными между программами


Автор: apostolnikolai 10.10.2009, 12:21
Доброе время суток !!!

Подскажите для новечка !

Есть программа она состоит из 2 частей :
 
 1 часть СЕРВЕР он загрузается как служба NT .
 
 2 часть программа для администрирования сервера .

 
Задача из программы администрирования контролировать сервер ( пулучать сообщения о сбоях , данные их определенных переменных и т.д. )

Как это можно реализовать !

Автор: Beltar 10.10.2009, 13:28
Если по простецки, то можно в принципе свой простейший протокол обмена через сеть (Indy или сокеты) реализовать и пинговать сервак, ес-но можно и другие команды в посылке предусмотреть. Или сделать сервер COM-сервером.

Автор: AntonN 10.10.2009, 13:29
если работают на одном компьютере, я бы сделал через MMF

Автор: apostolnikolai 10.10.2009, 15:52
Цитата

если работают на одном компьютере, я бы сделал через MMF


А по подробней можно если не затруднит

Добавлено через 7 минут и 38 секунд
и если можно пример или исходничек 

Автор: Akella 10.10.2009, 16:24
А лучше сразу реализовывать через TCP/IP. Так более универсально.  Сервером можно управлять хоть через интернет.

Автор: kami 10.10.2009, 17:11
Цитата(apostolnikolai @  10.10.2009,  15:52 Найти цитируемый пост)
можно пример или исходничек 

Можно.

Автор: kami 10.10.2009, 17:38
Цитата(Akella @  10.10.2009,  16:24 Найти цитируемый пост)
 через TCP/IP. Так более универсально.

Да, единственная (и существенная) проблема - файрволлы, слишком много народу даже не представляет об их существовании и необходимости их настройки.
Пример для TCP

Автор: apostolnikolai 10.10.2009, 18:12
ОКЕЙ ВСЕМ СПАСИБО БУДУ ПЫТАТСЯ ВСЕ ЭТО ПОНЯТЬ  smile   smile 

Автор: apostolnikolai 10.10.2009, 18:55
Цитата

через TCP/IP. Так более универсально.


Чтото не хочит компилить вроде все окей 


Автор: apostolnikolai 10.10.2009, 19:50
все разобрался


Автор: apostolnikolai 10.10.2009, 20:33
подскажите как правельно в 
Код

FServer.SendToAll(Send); 
 загнать массив переменных и с другой стороны их получить ?

Автор: kami 10.10.2009, 21:48
Цитата(apostolnikolai @  10.10.2009,  20:33 Найти цитируемый пост)
 загнать массив переменных и с другой стороны их получить ?

Все зависит от того, какого типа эти переменные.

Автор: apostolnikolai 11.10.2009, 09:14
масив переменных string

Добавлено через 4 минуты и 57 секунд
а если не затруднить то можно и несколько примеров Integer, String ...........

Добавлено через 13 минут и 35 секунд
Код

var
  Buf: array[0..3] of string; // и вот здесь менять тип 
begin
  Buf[0] := '1';
  buf[1] := '2';
  buf[2] := '3';
  buf[3] := '4';
FServer.SendToAll(Buf,4);


ЭТО ПРАВЕЛЬНО

Автор: kami 11.10.2009, 17:01
Цитата(apostolnikolai @  11.10.2009,  09:14 Найти цитируемый пост)
ЭТО ПРАВЕЛЬНО

Нет, и в этом просто убедиться - достаточно сделать строки не по одному символу. Да и в D2009 это работать не будет.
В случае со строками проще всего воспользоваться TStringList, у которого есть методы записи в Tstream и чтения из него. Тогда передача строк сведется к передаче Tstream.
Если же обязательно должен быть массив строк (хотя весомых оснований не вижу), тогда нужно заводить собственный протокол обмена. К примеру: первый байт - код команды "передаю массив строк", второй байт (или 4 байта, т.е. integer) - количество строк, дальше - все строки (несколько дней назад выкладывал код записи строки в поток). Соответственно - приемная сторона делает всё в том же порядке: понимает, что ей передали массив строк, узнает, сколько строк передали, и принимает каждую строку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)