Ich möchte zwischen Programmen Daten mittels IPC austauschen. Unter Windows klappt der folgende Code wunderbar nur nicht unter Linux:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, simpleipc, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Test: TEdit;
SendMessage: TButton;
ClientStart: TButton;
Serverstart: TButton;
Memo1: TMemo;
SimpleIPCClient1: TSimpleIPCClient;
SimpleIPCServer1: TSimpleIPCServer;
procedure SendMessageClick(Sender: TObject);
procedure ClientStartClick(Sender: TObject);
procedure ServerstartClick(Sender: TObject);
procedure SimpleIPCServer1Message(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SimpleIPCServer1Message(Sender: TObject);
var s: String;
begin
s := SimpleIPCServer1.StringMessage;
Memo1.Lines.Add('--> '+s);
end;
procedure TForm1.SendMessageClick(Sender: TObject);
begin
if SimpleIPCClient1.Active
then SimpleIPCClient1.SendStringMessage(Test.Text)
else Memo1.Lines.Add('Erst den Client starten!');
end;
procedure TForm1.ClientStartClick(Sender: TObject);
begin
Memo1.Lines.Add('Starte Client');
SimpleIPCClient1.ServerID := 'test';
if SimpleIPCClient1.ServerRunning
then SimpleIPCClient1.Connect
else Memo1.Lines.Add('kein Server!');
end;
procedure TForm1.ServerstartClick(Sender: TObject);
begin
Memo1.Lines.Add('Starte Server');
SimpleIPCServer1.ServerID := 'test';
SimpleIPCServer1.Global := True;
SimpleIPCServer1.StartServer;
end;
end.
Der Start von Server und Client funktioniert offensichtlich. Der Server scheint aber unter Linux nichts zu empfangen.
Es kommt keine Fehlermeldung hoch.
Ist das bei Euch auch so? Hat jeman eine Ahnung warum?
Meine Umgebung
- Windows 8.1: Lazarus 1.2.4, FPC 2.6.4
- Linux Debian GNU/Linux 7.7 (wheezy): Lazarus 1.2.4, FPC 2.6.4 (i386-gtk2)
Viele Grüße
Willi4Willi