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

Delphi Sources



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

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

в разделе интернет и сети я писал:

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

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

Там ни кто не отвечает. Здесь так же жду ответа.
Или подскажите как осуществить подобную связь с помощью 2 ехе. чтоб одна слала строку другой через инет. а обратно возвращался только результат расчета этой строки. То есть просто запрос ответ.
Ответить с цитированием
  #2  
Старый 12.08.2009, 09:30
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Через Инет и именно такую задачу не пробовал реализовать.
Но одно время была проблема копирования файлов по сети (с возможностью обмена сообщениями между Пользователями) без использования "расшаренных" папок.
Я использовал Delphi-компоненты из странички "FastNet" (в палитре компонентов).
TNMStrmServ, TNMStrm, TNMMsg, TNMMSGServ.
Ответить с цитированием
  #3  
Старый 12.08.2009, 15:42
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

А как их юзать мил человек?
Ответить с цитированием
  #4  
Старый 12.08.2009, 16:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще-то, для этих целей предназначен SOAP.
С другой стороны, можно обойтись компонентами Indy - TIdTCPClient/TIdTCPServer. Там все настолько примитивно, что даже объяснять ненадо.
Ответить с цитированием
  #5  
Старый 12.08.2009, 23:05
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

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


сервер
Код:
unit Unit1;

interface

uses
  winsock,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls,
  IdTCPConnection, IdTCPClient;

type
  TForm1 = class(TForm)
    IdTCPServer1: TIdTCPServer;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    IdTCPClient1: TIdTCPClient;
    Button1: TButton;
    Edit3: TEdit;
    Label3: TLabel;
    Button2: TButton;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure IdTCPServer1Exception(AThread: TIdPeerThread;
      AException: Exception);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.IdTCPServer1Exception(AThread: TIdPeerThread;AException: Exception);
var s: string;
key, i :integer;
begin
key:=10;
with athread.Connection do
try
  try
  edit2.Text:=readln;
  //writeln(edit1.Text);
  except
  on e: exception do writeln(e.Message);
  end;
finally
disconnect;
end;

end;

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.Button1Click(Sender: TObject);
begin
with idtcpclient1 do
  try
    connect;
    try
      writeln(edit1.Text);
      //edit2.Text:=readln;
    finally
      disconnect;
    end;
  except
    on e: exception do showmessage('ошибка соединения: ' + e.message);
    on e: exception do showmessage('ошибка: ' + e.Message);
    end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
idtcpclient1.host:=edit3.Text;
idtcpclient1.Port:=strtoint(edit5.Text);
idtcpserver1.DefaultPort:=strtoint(edit4.text);
end;

end.

клиент
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient,Winsock, IdTCPServer;

type
  TForm1 = class(TForm)
    IdTCPClient1: TIdTCPClient;
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    IdTCPServer1: TIdTCPServer;
    Edit3: TEdit;
    Label3: TLabel;
    Button2: TButton;
    Edit4: TEdit;
    Edit5: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure IdTCPServer1Exception(AThread: TIdPeerThread;
      AException: Exception);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

with idtcpclient1 do

  try
    connect;
    try
      writeln(edit1.Text);
      //edit2.Text:=readln;
    finally
      disconnect;
    end;
  except
    on e: exception do showmessage('ошибка соединения: ' + e.message);
    on e: exception do showmessage('ошибка: ' + e.Message);
    end;

end;

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.IdTCPServer1Exception(AThread: TIdPeerThread;
  AException: Exception);
var s: string;
key, i :integer;
begin
key:=10;
with athread.Connection do
try
  try
  edit2.Text:=readln;
  //writeln(edit1.Text);
  except
  on e: exception do writeln(e.Message);
  end;
finally
disconnect;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
idtcpclient1.host:=edit3.Text;

idtcpclient1.Port:=strtoint(edit4.Text);
idtcpserver1.DefaultPort:=strtoint(edit5.text);
end;

end.
Ответить с цитированием
  #6  
Старый 13.08.2009, 01:40
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а ты не за файерволом сидишь? а то порты тогда надо пробрасывать.
Ответить с цитированием
  #7  
Старый 13.08.2009, 07:24
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

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

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

Последний раз редактировалось одинадцатый, 13.08.2009 в 13:12.
Ответить с цитированием
  #8  
Старый 13.08.2009, 20:27
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

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

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

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

исходники:

Сервер:
Код:
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.

клиент:

Код:
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.

Последний раз редактировалось одинадцатый, 13.08.2009 в 20:31.
Ответить с цитированием
  #9  
Старый 14.08.2009, 09:07
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Так тебя спросили - ты за роутером, или в нете напрямую?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #10  
Старый 14.08.2009, 11:22
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

Меня спросили сижу ли я за файрволом. я грю: из защиты тока каспер. его отулючил. плохо понимаю что такое роутер. модем у меня скайлинк, выход в сеть через местного мобильного оператора.
Хотя hamachi недавно установил, его настройки мне в систему засели. может он мешается...

Так, отставить хамачи. я щас на статью наткнулся где говориться что исходя из того что мой ip начинается с 10. у меня роутер.
Правильно говорят?
Что делать теперь?

Последний раз редактировалось одинадцатый, 14.08.2009 в 13:34.
Ответить с цитированием
  #11  
Старый 15.08.2009, 00:08
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию

Учить твою прогу юзать прокси, насколько я понимаю.
Ответить с цитированием
  #12  
Старый 15.08.2009, 11:03
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

Помогите научить, а то я сам неуч)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter