client: unit Main;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, IdAntiFreezeBase, IdAntiFreeze;type TForm2 = class(TForm) Memo1: TMemo; Connect: TButton; Client: TIdTCPClient; IdAntiFreeze1: TIdAntiFreeze; Button1: TButton; procedure ConnectClick(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm}procedure TForm2.ConnectClick(Sender: TObject); begin with Client do begin Connect; while Connected do begin Memo1.Lines.Add(ReadLn('', 3000)); if ReadLnTimedOut then begin MessageDlg('Timeout!', mtInformation, [mbOk], 0); Exit; end; end; end; end;procedure TForm2.Button1Click(Sender: TObject); begin self.Memo1.Clear; end;end.server:unit Main;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;type TForm1 = class(TForm) IdTCPServer1: TIdTCPServer; Button1: TButton; Button2: TButton; Edit1: TEdit; Memo1: TMemo; procedure IdTCPServer1Execute(AThread: TIdPeerThread); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } FSend: Boolean; s : string; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); begin
if S <> '' then begin AThread.Connection.Write('NOOP'); AThread.Connection.WriteLn(s); Self.Memo1.Lines.Add(S); s := ''; end;end;procedure TForm1.Button2Click(Sender: TObject); begin FSend := False; end;procedure TForm1.Button1Click(Sender: TObject); begin FSend := True; S := edit1.Text;end;procedure TForm1.FormCreate(Sender: TObject); begin IdTCPServer1.Active := True; end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin IdTCPServer1.Active := False; end;end.
<高级一点的办法,就是使用内存中的共享地址来传递数据。>哪机关枪打蚊子容易误伤别人哦
建议用INI或注册表,如是文字,之间读取,如果是文件,读取路径
unit Main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
StdCtrls, IdAntiFreezeBase, IdAntiFreeze;type
TForm2 = class(TForm)
Memo1: TMemo;
Connect: TButton;
Client: TIdTCPClient;
IdAntiFreeze1: TIdAntiFreeze;
Button1: TButton;
procedure ConnectClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.ConnectClick(Sender: TObject);
begin
with Client do begin
Connect;
while Connected do
begin
Memo1.Lines.Add(ReadLn('', 3000));
if ReadLnTimedOut then
begin
MessageDlg('Timeout!', mtInformation, [mbOk], 0);
Exit;
end;
end;
end;
end;procedure TForm2.Button1Click(Sender: TObject);
begin
self.Memo1.Clear;
end;end.server:unit Main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FSend: Boolean;
s : string;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
if S <> '' then
begin
AThread.Connection.Write('NOOP');
AThread.Connection.WriteLn(s);
Self.Memo1.Lines.Add(S);
s := '';
end;end;procedure TForm1.Button2Click(Sender: TObject);
begin
FSend := False;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
FSend := True;
S := edit1.Text;end;procedure TForm1.FormCreate(Sender: TObject);
begin
IdTCPServer1.Active := True;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
IdTCPServer1.Active := False;
end;end.
1. 共享内存;
2. 采用管道技术,CreatePipe;
3. 采用TCP连接方式。
第二种方式请参看msdn。