Chat

Rund um die LCL und andere Komponenten
Antworten
benderboxer
Beiträge: 12
Registriert: Sa 21. Dez 2019, 20:55

Chat

Beitrag von benderboxer »

Hallo Zusammen!

Ich habe eine kleine Frage:

Kann ich mithilfe eines Tools (o. Ä.) Daten / Informationen an andere Geräte senden, die die gleiche Anwendung offen haben?
Oder ist das zu kompliziert? Möglichst ohne Datenbanken, da ich das sonst auch einfach in PHP machen kann ;D

Es wird doch sicherlich eine Lösung geben oder nicht?

Grüße
Ben

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Chat

Beitrag von Warf »

Ja klar, es gibt TCP streams und UDP datagrams.

TCP streams garantieren das die Daten die man sendet auch ankommen (oder die Verbindung geht komplett kaputt) und das die Daten in der richtigen reihenfolge ankommen. UDP macht das nicht. TCP ist für kommunikation gedacht, bei der fehler inakzeptabel sind (z.B. chats, stell dir vor bei einer nachricht würden teile fehlen, und andere teile einfach in der falschen reihenfolge ankommen). UDP hingegen ist schnell und für daten gedacht die verloren gehen können (z.B. spiele senden updates zum server, wenn man eins verloren geht ist das nicht so schlimm, ein hoher ping hingegen ist viel schlimmer)

Nehmen wir mal an du willst TCP benutzen, TCP hat eine Client-Server architektur. Ein Server startet und wartet auf clients zum verbinden. Wenn eine verbindung etabliert wurde, können die beiden reden.
Für TCP streams stellt der fpc die Unit ssockets zur verfügung, Beispiel Server:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
  Server: TInetServer;
begin
  Server := TInetServer.Create('0.0.0.0', 2649, TSocketHandler.Create);
  Server.OnConnect:=@ConnectionFromClient;
  Server.StartAccepting;
end;
 
procedure TForm1.ConnectionFromClient(Sender: TObject; Data: TSocketStream);
begin
  Data.WriteAnsiString('Hallo Welt!');
  Data.Free;
end;   
Das startet einen Server, wartet auf verbindungen auf port 2649, wenn ein client verbindet wird ihm Hallo Welt gesendet, und die verbindung geschlossen

Der client dazu sähe dann ungefähr so aus:

Code: Alles auswählen

var
  client: TInetSocket;
begin
  client := TInetSocket.Create('127.0.0.1', 2649, TSocketHandler.Create);
  client.Connect;
  ShowMessage(client.ReadAnsiString);
  client.Free;  
Und wenn man jetzt beide anwendungen startet (server zu erst), wird vom server Hallo Welt an den Clienten geschickt, der das schön ausgeben kann.

Das ist natürlich nur ein sehr einfaches beispiel. Je nachdem was du machen willst ist das vielleicht nicht das was du willst. Falls das nicht ist was du suchst, kannst du gerne genauer beschreiben, gibt ne menge anderer möglichkeiten. Ein simplet TCP stream ist nur das einfachste

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Chat

Beitrag von fliegermichl »

oder einfacher mit den Standard Komponenten IPC Client und IPC Server

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Chat

Beitrag von Warf »

fliegermichl hat geschrieben:oder einfacher mit den Standard Komponenten IPC Client und IPC Server
Wenn er IPC (Inter Prozess Communication, also sprechen zwischen Prozessen auf dem selben Gerät) machen wöllte, wäre der IPC Server bestimmt das richtige. Da er aber über verschiedene Geräte hinweg arbeiten will, wird er mit IPC nicht weit kommen

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1639
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Chat

Beitrag von fliegermichl »

Da hast du allerdings Recht

benderboxer
Beiträge: 12
Registriert: Sa 21. Dez 2019, 20:55

Re: Chat

Beitrag von benderboxer »

Ok, Dankeschön!

~ Thema erledigt

Antworten