Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TCP-Client und -server in einer Applikation? (https://www.delphipraxis.net/215160-tcp-client-und-server-einer-applikation.html)

Marco Steinebach 20. Mai 2024 07:51

TCP-Client und -server in einer Applikation?
 
Hallo zusammen,
Ich möchte ein einfaches Chat-Programm erstellen, dass, hier im lokalen Netz, Nachrichten unter, vorerst, zwei Rechnern austauschen kann.
Kann ich einfach ein Programm, das beides, also den Server und den Client enthält, basteln, oder gibt's dafür sinnigere Lösungsansätze?
Also das Programm soll tun:
Verbinde dich mit dem Client auf IP 192.168....
Wenn du ihn gefunden hast, zeig das an.
Drücke ich auf (senden) schick ihm, also dem Client, eine Nachricht.
Und jetzt warte, bis der andere PC, mit dem du verbunden bist, dir eine Nachricht zurückschickt (deshalb kam ich auf Server).

Kann mich da mal bitte jemand auf die richtige Spur setzen?

Herzlich grüßt
Wandogau

jaenicke 20. Mai 2024 10:34

AW: TCP-Client und -server in einer Applikation?
 
Ein sehr simples Beispiel findest du hier in der Doku:
https://docwiki.embarcadero.com/Code...ocket_(Delphi)

Andere Komponenten sind besser, aber den Zweck erfüllt es.

Christian Seehase 20. Mai 2024 10:40

AW: TCP-Client und -server in einer Applikation?
 
Moin,

ich habe so etwas mal mit den Indys (https://www.indyproject.org/) gemacht,
(TidTCPClient, TidTCPServer), allerdings weiss ich nicht, ob die unter
Delphi 5 nutzbar sind.

Gruss
Christian

Marco Steinebach 20. Mai 2024 11:02

AW: TCP-Client und -server in einer Applikation?
 
Hallo zusammen,
Jep! Die Indys functionieren sogar unter D5 noch, sogar als aktuelle Version.
Mir war nur nicht klar, ob man eine Server- und eine Client-Komponente im selben Programm haben kann, ohne, dass die sich in die Haare kriegen.

Also erstmal: lieben Dank!

Herzlich grüßt
Wandogau

dummzeuch 20. Mai 2024 11:31

AW: TCP-Client und -server in einer Applikation?
 
Es gibt prinzipiell keinen Grund, nicht in demselben Programm eine (Indy-)Client- und eine Server-Komponente zu verwenden. Allerdings brauchst Du das für diesen Anwendungsfall nicht, denn wenn die Verbindung einmal hergestellt ist, kann man darüber Daten in beide Richtungen schicken.
Falls mal mehr als zwei Programme miteinander kommunizieren sollen, bietet es sich aber eher an, dass ein Server die Verbindung zwischen allen herstellt.

Wobei: Man kann das natürlich auch auf andere Weise lösen, z.B. dass man die Nachrichten über einen File-Share austauscht. Das ist deutlich simpler.

Oder man macht es wie DeltaChat und verwendet E-Mail als Transportprotokoll.

Es kommt halt immer auf die konkreten Anforderungen an:
  • Sollen sich die Programme automatisch finden?
  • Wie sicher soll die Verbindung sein? (Anmeldung bzw. Tranmsportverschlüsselung)
  • Geht es nur um's LAN oder soll die Verbindung über's Internet funktionieren?

Marco Steinebach 20. Mai 2024 12:26

AW: TCP-Client und -server in einer Applikation?
 
Liste der Anhänge anzeigen (Anzahl: 1)
An den Austausch über eine Datei hatte ich auch schon gedacht, aber andererseits, dachte ich ;-), müsste es ja über TCP auch gehen.
Wie, um Himmelswillen, kann ich denn zwei Clients, ohne Server, miteinander verbinden, so, dass die dann auch auf Nachrichten vom anderen Client warten?

Das Programm ist, am Ende, nur dafür da, dass ich an unseren Senderechner (für unseren kleinen Radiosender), eine Nachricht schicken kann, und der Moderator kann antworten, sprich auch wieder eine Nachricht an denjenigen, der die ursprüngliche Nachricht gesendet hat, schicken.
Soll nur! im Lokalen Netz laufen.

Ich häng' meinen Entwurf mal dran, im Moment ist der, natürlich, weder schön noch sinnvoll, aber wenn ich das Programm auf zwei Rechnern laufen lasse, finden die sich auch, aber:
vom einen Rechner werden die Nachrichten auf dem anderen Empfangen, aber andersherum nicht.
Wenn ich das Programm schliesse, kriege ich einen Socket-Fehler 1053.
Vielleicht könnte da mal jemand von euch draufschauen?
Ich häng' das Ganze hier mal an!

Schonmal lieben Dank und herzliche Grüße
Wandogau

mjustin 20. Mai 2024 19:19

AW: TCP-Client und -server in einer Applikation?
 
Zitat:

Zitat von Marco Steinebach (Beitrag 1536868)
Wie, um Himmelswillen, kann ich denn zwei Clients, ohne Server, miteinander verbinden, so, dass die dann auch auf Nachrichten vom anderen Client warten?

"Server" ist nur derjenige, der auf eingehende TCP-Verbindungen wartet. Sobald die Verbindung aufgebaut ist, können beide Peers über die Verbindung sowohl senden als auch empfangen. Dazu hat die Verbindung einen Stream in jede Richtung, einen in den geschrieben und einen aus dem gelesen werden kann.

Die IdTelnet-Komponente ist ein Beispiel, hier wird zum Empfangen ein Thread verwendet um laufend auf Nachrichten vom Server zu warten, während das Senden nur vom Hauptthread aus geschieht.


https://eng.libretexts.org/Bookshelv...0two%20sockets.

Marco Steinebach 24. Mai 2024 14:53

AW: TCP-Client und -server in einer Applikation?
 
Hallo zusammen,
Okay, ich hab jetzt echt alles versucht, aber ich verstehe immernoch nicht, wie ich die beiden Clients, ohne Server, verbinden soll.
Trage ich bei beiden die IP und den Port des jeweils anderen PC's ein und führe connect aus, kriege ich keine Verbindung, was mich irgendwie nicht wirklich wundert. ;-)
Aber wie dann?
Kann mir bitte mal jemand auf die Sprünge helfen?

Vielleicht könnte sich doch mal jemand mein Beispiel ansehen, mit Client und Server ist ja auch völlig in Ordnung, aber, wie oben geschrieben, hängt sich das Prog spätestens beim Close komplett auf, und wenn ich es auf zwei Rechnern gestartet habe, geht der Nachrichtenaustausch zwar in die eine, aber nicht in die andere Richtung.

Herzlich grüßt und bedankt sich schonmal für eure Hilfe
Wandogau

Sherlock 25. Jun 2024 13:24

AW: TCP-Client und -server in einer Applikation?
 
Hmmm, ich meine mich zu entsinnen, daß die Indys recht kompliziert zu handhaben sind. Dynamische Erzeugung der Komponenten, wie in Deinem Versuch, gehört auch dazu. Also probier es doch lieber erstmal einfacher aus und leg die Komponenten in einem neuen Projekt auf die Form1 und schau was Du damit tun kannst. Alternativ kann ich die ICS von Overbyte wärmstens empfehlen, die ebenfalls kostenfrei zu erhalten sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz