Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2010, 07:24   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Создание удаленнной компоненты

Добрый день всем! Ситуация такова. Есть программка. Необходимо сделать ее удаленной. Вот более точное задание: разработать прокси-адаптер, позволяющий вашу компоненту сделать уделенной. Соотсетственно, программа разбивается на клиентскую (тесты) и серверную (компонента).. Подскажите плиз в какую сторону смотреть и где почитать как это сделать? Как сделать к ней сетевой интерфейс? Заранее спасибо за помощь.
Вложения
Тип файла: zip 3л.zip (209.1 Кб, 11 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.02.2010, 10:02   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

то-что должен видеть и контроллировать удаленный пользователь делаете клиентом (нажатия кнопок и визуализация) и обмен через любые Indy компоненты (idClientSocket), в саму "компоненту" добавляете idServerSocket и делаете примитивный протокол обмена... затык-то в чем...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.02.2010, 11:05   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

raxp, спасибо, что ответили.
Цитата:
о-что должен видеть и контроллировать удаленный пользователь делаете клиентом (нажатия кнопок и визуализация)
т.е. в моем случае можно окошко, в котором выводится результат, сделать на отдельной машине, а окно, в котором кнопки на другой?
Цитата:
делаете примитивный протокол обмена
Можно поподробнее? Я просто с сетью в Delphi не работал ранее.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.02.2010, 13:42   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

нет-нет... какой в этом смысл? пользователь чего-нить набирает тут, а смотрит там... логично, ежели тут набирает и тут смотрит, а расчеты на удаленной, раз такое задание. По работе с сетью: берете два указанных компонента и методом sendtext или sendbuffer посылаете то, что нужно рассчитать, сервер принимает, "компонент" считает и отдает серверу, сервер отсылает результат клиенту...

по обмену >>> тестовый пример <<<
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.02.2010, 15:59   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Да вообщем-то необязательно, чтобы было на двух машинах, можно и на одной сделать. Локально)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.02.2010, 19:30   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

raxp, я посмотрел Ваше вложение. Не могли бы Вы пояснить этот код и рассказать принцип работы? Тогда я может пойму как это может помочь мне.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle,
  IdUDPClient, StdCtrls;

type t_trackpacket = record
    packet_version: shortint;
    port: shortint;
    flags: integer;
    software: array [0..31] of byte;
    version: array [0..15] of byte;
    platform_: array [0..31] of byte;
    server_desc: array [0..63] of byte;
    server_location: array [0..63] of byte;
    server_url: array [0..95] of byte;
    contact_name: array [0..63] of byte;
    contact_email: array [0..63] of byte;
    users: integer;
    channels: integer;
    games: integer;
    uptime: integer;
    total_games: integer;
    total_logins: integer;
end;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    IdUDPServer1: TIdUDPServer;
    IdUDPClient1: TIdUDPClient;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    procedure SpeedButton1Click(Sender: TObject);
    procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
var t: t_trackpacket;
begin
 t.flags:= strtoint(edit1.Text);
 IdUDPClient1.SendBuffer('localhost', 800, t, sizeof(t))
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var packet: t_trackpacket;
begin
 adata.Read(packet, SIZEOF(packet));

 edit2.Text:= inttostr(packet.flags)
end;

end.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.02.2010, 20:31   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

t_trackpacket - пакет с данными, у вас свой набор, скажем x,y
Код:
type packet = record // структура с данными
 x, y: integer;
end;
...отсылка пакета t: packet на ip- адрес сервера по порту 800 используя компонент IdUDPClient
Код:
t.x:= 100; // заполняем пакет данными для расчета
t.y:= 200;
IdUDPClient1.SendBuffer(ip, 800, t, sizeof(t))
...сервер IdUDPServer принял пакет t: packet
Код:
 // приняли пакет от клиента
 adata.Read(t, SIZEOF(t));

 func(t.x, t.y) // чего-нить делаем с данными от клиента

// допустим так
...
procedure func(k1, k2: integer);
begin
 sum:= k1 + k2;
 // отсылаем обратно
 IdUDPServer1.Send(ip клиента, 800, sum);
 // или так IdUDPServer1.SendBuffer(ip клиента, 800, sum, sizeof(sum))
end;
...далее клиент принял от сервера ответ и отобразил результат.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 21.02.2010, 20:35   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

raxp, я конечно понимаю, что с моей стороны это наглость, но не могли бы Вы помочь мне применительно к моему коду? Хотя что-нибудь чуть-чуть, если Вам не трудно. Буду премного благодарен. Говорю ж, что не работал ранее с сетью.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 21.02.2010, 22:44   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

держите... клиент-сервер на сокетах, модуль расчета (класс TTerm) на сервере... на клиенте оставил для наглядности и проверки
Изображения
Тип файла: jpg Копировать из новый-2.jpg (42.7 Кб, 102 просмотров)
Вложения
Тип файла: zip 3л_клиент_сервер_mod.zip (7.4 Кб, 13 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 22.02.2010, 06:17   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

raxp, у меня Delphi после недавней переустановки. Там используются компоненты ServerSocket и Clientsocket, которые если я не ошибаюсь нужно установить вручную в Delphi, ибо изначально их нет на палитре. Не могли бы Вы подсказать где их найти? Кажется где-то в Environmet Options...Потому что без этих компонентов у меня не получается скомпилировать. Access Violation появляется.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание объектов компоненты в С++ Builder d0ger C++ Builder 1 06.12.2009 19:24
Компоненты AngelOfDeath Компоненты Delphi 0 12.04.2008 11:43
Компоненты! Altera Компоненты Delphi 2 07.03.2008 15:22
Rx Компоненты Volkogriz Компоненты Delphi 1 26.10.2007 16:01
Создание компоненты [Andrey] Общие вопросы .NET 1 04.10.2007 19:03