Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.08.2009, 10:13
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию Удаленный вызов DLL

Помогите пожаулйста.

Задача:
Написать 2 библиотеки. в одной должна быть ф-ия вызывающая функцию из 2 длл-ки(или программы - ЕХЕ) через интернет. т.е. указывается конкретный ip и дорога к файлу второй библиотеки(так наверно ). При чем так чтоб обратно возвращался только результат расчета ф-ии.
Цель: защитить функции 2 длл(или программы - ЕХЕ) от декомпиляции.
Как примерно выглядит такой код?

Или подскажите где почитать про это.


Ну хотяб подскажите как осуществить подобную связь с помощью 2 ехе. чтоб одна слала строку другой через инет. а обратно возвращался только результат расчета этой строки.

Последний раз редактировалось одинадцатый, 11.08.2009 в 20:42.
Ответить с цитированием
  #2  
Старый 13.08.2009, 18:38
Аватар для AmX
AmX AmX вне форума
Прохожий
 
Регистрация: 25.04.2008
Адрес: Вологда
Сообщения: 27
Репутация: 10
Сообщение :)

если я Вас правильно понел, то Вам нада копать в сторону Клиент/Серверных приложений(определение)..
прямо использовать DLL'ку с другой машины через инет без скачивания её на клиенский комп невозможно, если только она не является клиентом/сервером..
можно так же сервер реализовать на PHP(к примеру), а библиотеки-клиенты на Delphi..
так будет даже лучше т.к. не на всех машинах встанет сервер))
останется найти халявный PHP хостинг и залить туда скрипт, а клиентов научить обрабатывать HTTP запросы..
почитать об этом можно тут...
__________________
Никакая цель не высока настолько, чтобы оправдывала недостойные средства для ее достижения.
Невозможно решить проблему на том же уровне, на котором она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.
(Альберт Энштеин)

Существует три разновидности людей: те, кто видит; те, кто видит, когда им показывают; и те, кто не видит.
Оскорбляя другого, ты не заботишься о самом себе.
(Леонардо да Винчи)

Моя политика проста - пашло всё н#куй.
(Краснодеревщик М.)

+++
Ответить с цитированием
  #3  
Старый 14.08.2009, 09:26
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

Не) Это для меня сложновато. Я в новичках ту же тему открыл. вот посты отдута:

с помощью инди сделал такой вот пирог. проблема в след.:
товарищу дал обе проги, мы вводили ip друг друга. короче ему от меня доходили сообщения и от клиента и от сервера, а мне нет - ошибки 10060 и 10061. что делать?

а ты не за файерволом сидишь? а то порты тогда надо пробрасывать.

У меня запущен каспер, у него винда с нуля, и брэндмаузер отключен.
Что значит пробрасывать? Как? Я эту прогу буду давать многим людям как сделать чтоб у них таких проблем не возникало?
И еще как узнать с какого ip вновь подключился клиент и когда он отсоединился?

в общем он попробовал с подключения с которого мне пытался послать, послать себе на другого оператора - пришло. а до меня всяко разно не доходит. каспер отключил. в чем может быть дело?
Последний раз редактировалось одинадцатый, Вчера в 12:12.



Так отставить инди! С сокетами сделал. теперь получше.
От меня товарищу идет и от клиента и от сервера. от него ко мне идет только от сервера, ошибка все та же - 10060. Хотя от него до другого адреса идет и от того и от того. у меня в проге ip определяется при formcreate. а когда к нему на серв сообющение приходит от меня (клиента) ип пишется совсем другой. нам кжется что в этом проблема.

И еще такая ошибка: Невозможно выполнить операцию на сокете, т.к. буфер обмена мал или очередь переполнена. появляется при активации клиента иногда. что с ним?

что делать господа?

исходники:

Сервер:
Код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient,Winsock, IdTCPServer, ScktComp, ComCtrls;
 
type
  TForm1 = class(TForm)
    Label4: TLabel;
    Label5: TLabel;
    Button3: TButton;
    Button4: TButton;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit6: TRichEdit;
    edit7: TRichEdit;
    ServerSocket1: TServerSocket;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
  result:string;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
form1.Caption:='Server   ip - ' + result;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  i: byte;
begin
  with ServerSocket1.Socket do
  begin
    if ActiveConnections>0 then
      for i := 0 to ActiveConnections - 1 do
      try
        Connections[i].SendText(edit6.Text);
        Application.ProcessMessages;
      except
        //
      end;
  end; {/WITH}
end;
 
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
edit7.Text:=socket.ReceiveText;
end;
 
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Str: string;
  RemIP: string;
begin
  label1.Caption :='Последнее сообщение с ip - ' +  Socket.RemoteAddress;
  edit7.Text := Socket.ReceiveText;
end;
 
end.


клиент:

Код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient,Winsock, IdTCPServer, ScktComp, ComCtrls;
 
type
  TForm1 = class(TForm)
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button3: TButton;
    Edit8: TEdit;
    Button4: TButton;
    Edit9: TEdit;
    Edit10: TEdit;
    ClientSocket1: TClientSocket;
    Edit6: TRichEdit;
    edit7: TRichEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
  result:string;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
form1.Caption:='client   ip - ' + result;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
  i: byte;
begin
  with clientSocket1.Socket do
  begin
      try
        sendtext(edit6.text);
      except
        //
      end;
  end; {/WITH}
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
clientsocket1.Active:=false;
clientsocket1.Address:=edit8.Text;
clientsocket1.Active:=true;
end;
 
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
edit7.Text:=socket.ReceiveText;
end;
 
end.

Последний раз редактировалось одинадцатый, 14.08.2009 в 09:29.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:35.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025