|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
связь программ через интернет
в разделе интернет и сети я писал:
Задача: Написать 2 библиотеки. в одной должна быть ф-ия вызывающая функцию из 2 длл-ки(или программы - ЕХЕ) через интернет. т.е. указывается конкретный ip и дорога к файлу второй библиотеки(так наверно ). При чем так чтоб обратно возвращался только результат расчета ф-ии. Цель: защитить функции 2 длл(или программы - ЕХЕ) от декомпиляции. Как примерно выглядит такой код? Или подскажите где почитать про это. Там ни кто не отвечает. Здесь так же жду ответа. Или подскажите как осуществить подобную связь с помощью 2 ехе. чтоб одна слала строку другой через инет. а обратно возвращался только результат расчета этой строки. То есть просто запрос ответ. |
#2
|
|||
|
|||
Через Инет и именно такую задачу не пробовал реализовать.
Но одно время была проблема копирования файлов по сети (с возможностью обмена сообщениями между Пользователями) без использования "расшаренных" папок. Я использовал Delphi-компоненты из странички "FastNet" (в палитре компонентов). TNMStrmServ, TNMStrm, TNMMsg, TNMMSGServ. |
#3
|
|||
|
|||
А как их юзать мил человек?
|
#4
|
|||
|
|||
Вообще-то, для этих целей предназначен SOAP.
С другой стороны, можно обойтись компонентами Indy - TIdTCPClient/TIdTCPServer. Там все настолько примитивно, что даже объяснять ненадо. |
#5
|
|||
|
|||
с помощью инди сделал такой вот пирог. проблема в след.:
товарищу дал обе проги, мы вводили 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
|
|||
|
|||
а ты не за файерволом сидишь? а то порты тогда надо пробрасывать.
|
#7
|
|||
|
|||
У меня запущен каспер, у него винда с нуля, и брэндмаузер отключен.
Что значит пробрасывать? Как? Я эту прогу буду давать многим людям как сделать чтоб у них таких проблем не возникало? И еще как узнать с какого ip вновь подключился клиент и когда он отсоединился? в общем он попробовал с подключения с которого мне пытался послать, послать себе на другого оператора - пришло. а до меня всяко разно не доходит. каспер отключил. в чем может быть дело? Последний раз редактировалось одинадцатый, 13.08.2009 в 13:12. |
#8
|
|||
|
|||
Так отставить инди! С сокетами сделал. теперь получше.
От меня товарищу идет и от клиента и от сервера. от него ко мне идет только от сервера, ошибка все та же - 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
|
||||
|
||||
Так тебя спросили - ты за роутером, или в нете напрямую?
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#10
|
|||
|
|||
Меня спросили сижу ли я за файрволом. я грю: из защиты тока каспер. его отулючил. плохо понимаю что такое роутер. модем у меня скайлинк, выход в сеть через местного мобильного оператора.
Хотя hamachi недавно установил, его настройки мне в систему засели. может он мешается... Так, отставить хамачи. я щас на статью наткнулся где говориться что исходя из того что мой ip начинается с 10. у меня роутер. Правильно говорят? Что делать теперь? Последний раз редактировалось одинадцатый, 14.08.2009 в 13:34. |
#11
|
|||
|
|||
Учить твою прогу юзать прокси, насколько я понимаю.
|
#12
|
|||
|
|||
Помогите научить, а то я сам неуч)
|