Entwickler-Ecke
Internet / Netzwerk - Kommunikation unter Programmen [gelöst]
lemming - Di 29.07.03 17:31
Titel: Kommunikation unter Programmen [gelöst]
Hi,
welche Methode würdet ihr vorschlagen um die Kommunikation zwischen zwei Programmen vonstatten gehen zu lassen. Zur Erleichterung. Beide werde ich selber schreiben ;)
Unter Windows würde ich selbstverständlich das Windows Messaging nehmen, aber da daß Prog unter Windows UND Linux laufen muß. Was nehme ich.
Ich habe da an UDP gedacht. :) Ich muß auch ziemlich viel hin und her schaufeln und das ziemlich schnell. In no time versteht sich.
UC-Chewie - Di 29.07.03 17:37
Wenn die beiden Programme auf dem gleichen Rechner laufen, dann ist IP ne Möglichkeit (über localhost). Ich weiß nicht, ob das so das Schnnellste ist, aber es geht halt unter sowohl Win als Linux.
Vielleicht gibt es auch eine SharedMemory-Funktionalität, die bei beiden Betriebsystemen geht.
MSCH - Di 29.07.03 21:32
hmmm, vieleicht liege ich ja falsch, aber was hälst du von Files ? Ist zwar etwas altertümlich aber relativ leicht zu proggen und zu prüfen aber systemunabhängig. Ein Fileserver wird sich ja finden lassen und wenns ne alte Winxxx Kiste mit einer Freigabe ist. (Samba auf Unix ist auch ok).
Gerade wenns viel ist, scheint der Overhead bei IP (udp vergiss, ist verbindungslos, d.h. du weisst nie ob Pakete angekommen sind) zu groß zu sein, und du mußt quasi dein eigenes Protokoll entwickeln.
grez.
msch
lemming - Mi 30.07.03 08:32
Oh nein! Was mach ich den nun in der Internet/Netzwerk sparte?
Nun die beiden Programme laufen gemeinsam auf dem selben Rechner. Das kam wohl noch nicht so ganz klar zum Ausdruck.
Einfache Dateien habe ich auch bereits in betracht gezogen. Aber wäre der Umweg über die Festplatte nicht etwas umständlich? Gebe es den keine elegantere Lösung über den Speicher?
| Zitat: |
| SharedMemory-Funktionalität |
Wie würde das denn funktionieren?
-lemming
Cyrus - Mi 30.07.03 08:52
Ich würde das mit TServerSocket und TClientSocket machen. Dann kannst du Commands als Strings vom einen zum anderen Programm schicken und dort machst du ne routiene welche diese Commands interpretiert. Am bessten schickst du Zahlenwerte dann kannst du bei der Behandlungsroutine mit case schön die Befehle (zahlen codes) interpretieren. Du kannst das so machen wie der DemoChat von Delphi aufgebaut ist sollte bei dir im delphi demos Ordner sein.
Greetz Cyrus
Cyrus - Mi 30.07.03 09:58
du kannst auch über OLE oder DDE gehen wenn du wirklich nur auf dem selben Rechner die Komunikation brauchst. Die Netzwerk Variante ist einfach flexiebler da die Art der Plattform nicht so eine Rolle spielt!
Greetz Cyrus
lemming - Mi 30.07.03 10:10
Ich glaube du hast recht. Ich mach's jetzt per UDP. Da kann bei ein und dem selben Rechner nicht viel passieren.
Danke für eure Hilfe.
Cyrus - Mi 30.07.03 10:25
wenn du wilslt dass niemand von aussen auf die netzwerk schnittstell deines Programms zugreifen kann dann verwende die IP 127.0.0.1
So kann man wirklich nur vom selben Rechner darauf zugreifen. Ausser es läuft ein Programm welches Pakete weiterleitet. :)
Greetz Cyrus
UC-Chewie - Mi 30.07.03 11:13
Ich bin mir nicht ganz sicher, aber ich glaube, dass zumindest unter Win Pakete mit der Zieladresse 127.0.0.1 gar nicht an den Netzwerktreiber geschickt werden, sondern schon intern im System verarbietet werden. Das spart Zeit, außerdem muss keine Verbindung hergestellt werden, denn wenn das Paket das System gar nicht verlässt, kann es auch (kaum) verloren gehen.
MSCH - Mi 30.07.03 13:12
Hmmm, *grübel* beide Proggs laufen auf der selben Maschine, beide schreibst du, und dann das ganze über ein asynchrones interface?
Dumme Frage, warum schreibst du zwei getrennte Proggs, die untereinander via Netzwerk kommunizieren sollen? Ich verstehs nicht.
Filebasierende "Komunikation" ist immer noch schneller, als Datenhäppchen durch den Flaschenhals Netzwerkkarte (oder deren Protokolle) zu schleusen, und dann noch über udp.
Schon mal überlegt, welche Bandbreite du brauchst? Nur so spasseshalber um vielleicht 10 GB durch eine (100MBit) Karte - auch wenn der localhost ist, zu schleusen ?
grez
msch
lemming - Do 31.07.03 15:06
²MSCH,
also eine Methode über den Speicher wäre mir am liebsten gewesen. Eine Kommunikation über Netzwerk ziehe ich einer Lösung auf Filebasis vor, da ich
1. keine 10 Gig schauffeln werde
2. ich der Meinung bin, wie UC-Chewie, das die Lösung über den Netzwerk-Adapter, bzw. über das Protokoll, schneller ist als über die Festplatte.
3. Ich das auch auf Linux und Windows laufen muss und somit das ganye auf einen gemeinsamen Nenner bringen mu-.
Und warum stellst du jetzt meine Wahl in Frage? Ich hab doch schon angefangen! WAHHHHHHHHHH! :twisted:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!