SimpleIPC problem lazarus / 21-General ---------------------------------------------------------------------- simsee · 2021-02-09 15:10 I want to communicate two programs that run locally. This is the code: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program prog1;uses  SimpleIpc; type   { TIpcHelper }   TIpcHelper=class     class procedure SimpleIPCServerMessageQueued(Sender: TObject);  end; var  Prog1Client: TSimpleIPCClient;  Prog1Server: TSimpleIPCServer;  Msg : string;  Line : string; { TIpcHelper } class procedure TIpcHelper.SimpleIPCServerMessageQueued(Sender: TObject);begin  Prog1Server.ReadMessage;  Msg:=Prog1Server.StringMessage;  writeln('Received:',Msg);end; begin  Prog1Server:=TSimpleIPCServer.Create(nil);  Prog1Server.ServerID:='1to2';  Prog1Server.Global:=True;  Prog1Server. OnMessageQueued:=@TIpcHelper.SimpleIPCServerMessageQueued;  Prog1Server.StartServer(False);   Prog1Client:=TSimpleIPCClient.Create(nil);  Prog1Client.ServerID:='2to1';   writeln('Waiting Prog2 Server');  repeat until Prog1Client.ServerRunning;  Prog1Client.Connect;   repeat    write('Send:');    readln(Line);    Prog1Client.SendStringMessage(Line);  until (Line='');   Prog1Client.Free;  Prog1Server.Free;end.  Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i program prog2;uses  SimpleIpc; type   { TIpcHelper }   TIpcHelper=class     class procedure SimpleIPCServerMessageQueued(Sender: TObject);  end; var  Prog2Client: TSimpleIPCClient;  Prog2Server: TSimpleIPCServer;  Msg : string;  Line : string; { TIpcHelper } class procedure TIpcHelper.SimpleIPCServerMessageQueued(Sender: TObject);begin  Prog2Server.ReadMessage;  Msg:=Prog2Server.StringMessage;  writeln('Received:',Msg);end; begin  Prog2Server:=TSimpleIPCServer.Create(nil);  Prog2Server.ServerID:='2to1';  Prog2Server.Global:=True;  Prog2Server. OnMessageQueued:=@TIpcHelper.SimpleIPCServerMessageQueued;  Prog2Server.StartServer(False);   Prog2Client:=TSimpleIPCClient.Create(nil);  Prog2Client.ServerID:='1to2';    writeln('Waiting Prog1 Server');  repeat until Prog2Client.ServerRunning;  Prog2Client.Connect;   repeat    write('Send:');    readln(Line);    Prog2Client.SendStringMessage(Line);  until (Line='');   Prog2Client.Free;  Prog2Server.Free;end.  The expected behavior is that when you type a string from the 'prompt' of either program, it is transmitted and received by the other and displayed. What happens instead is that the string sent from the first program to the second is displayed only after the second sends a string to the first. How can this problem be solved? ---------------------------------------------------------------------- simsee · 2021-02-10 08:47 I solved the problem: the readln statement prevent the output of received message. A working gui version is attached. In the demo two programs exchange messages. This is simple example of two-way local comunication between two running programs.