Post by Thomas SchwobeHallo,
folgendes Szenario: Zwei Anwendungen (A und B [programmiert mit
verschiedenen Sprachen]) sollen miteinander über das Netzwerk
kommunizieren. Dabei sollen sowohl Daten von A nach B aber auch
umgekehrt geschickt werden.
Mir fallen das spontan Dinge wie Sockets oder DCOM ein. WM_COPYDATA
und ähnliches fallen wegen des Remotezugriffs weg(?).
Hat jemand schon derartige Erfahrungen gesammelt und kann mir mal
einen Tipp geben, welche Lösung hier angebracht wäre?
TCP/IP ist dafür die beste Wahl, es funktioniert auch, wenn beide
Seiten auf Maschinen mit unterschiedlichen Betriebssystemen laufen und
für so gut wie jede Programmiersprache findet man Bibliotheken für
diese Art der Kommunikation.
Du mußt nur ein Protokoll für den Datenaustausch definieren das dann
auf beiden Seiten implementiert werden muss. Die Kommunikation läuft
generell nach dem folgenden Schema:
Anwendung A (der client) öffnet eine Verbindung mit der Anwendung B
(dem Server), dazu muss sie den Maschinennamen im Netzwerk oder die
IP-Adresse des Servers kennen und halt den Port, auf dem der Server
nach Verbindungsanfragen lauscht. Der Client kann dann Daten an den
Server schicken und andere Daten als Antwort zurückbekommen. (Prinzip
Anfrage und Antwort). Wenn der Server auch von sich aus (ohne Anfrage
des Clients) Daten an den Client schicken soll vertauschen sich dafür
die Rollen, der Server wird zum Client und der Client muss seinerseits
auf Anfragen von aussen warten, also wie ein Server agieren. Das Ganze
erfordert also auch ein gehöriges Mass an multithreading, da der auf
Anfragen wartende Thread blockiert ist bis eine Anfrage eintrifft.
Das Protokoll kann einfach sein. Üblicherweise definiert man einen
Header fester Größe und Struktur, mit dem jede Anfrage und jede Antwort
beginnt. Im Header steht mindestens wieviel bytes an Daten auf den
Header folgen, und möglichst auch eine feste Sequenz von Bytes, die als
Marker dienen, anhand dessen ein Header als solcher identifiziert
werden kann. Mit einem solchen Konstrukt kann der Emfänger immer
verläßlich feststellen, dass er die komplette "Sendung" erhalten hat
und verarbeiten kann.
--
Peter Below (TeamB)