Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client-Server-Kommunikation im LAN (https://www.delphipraxis.net/17330-client-server-kommunikation-im-lan.html)

Schubi 3. Mär 2004 12:34


Client-Server-Kommunikation im LAN
 
Hi!

Folgendes Problem:
Im Firmennetzwerk führen einige Rechner mein Programm aus.
Die EXE liegt zentral auf einem Fileserver.
Mein Problem dabei ist, dass die EXE durchgehend in gebrauch ist (Schichtbetrieb), und ich deshalb nicht updaten kann.

Momentan ist die Sache so gelöst, dass sich die EXE beim Start mit der IP-Adresse in eine Textdatei einschreibt, und beim Beenden den Eintrag wieder entfernt.
Dann habe ich ein Programm um den Beenden-Befehl zu senden.
Die Beiden kommunizieren über TServersocket und TClientsocket miteinander.
Jedenfalls gefällt mir die Lösung überhaupt nicht.

Wie bekomm ich es am besten hin, dass ich jederzeit mein kleines Proggy starten kann und an alle Clients die gerade laufen den Beenden-Befehl senden kann, OHNE dabei über Textfiles rausfinden zu müssen, wo die Software läuft.

Die Befehle werden als Text versendet. Zusätzlich ist es möglich normale Nachrichten zu verschicken (momentan nur in eine Richtung, würde mir aber beide Richtungen wünschen).

Am besten wären wohl Indy-Komponenten, oder?
Wie stell ich das mit der Userlist an und wie bekomm ich ne zuverlässige Kommunikation in beide Richtungen hin?

Gruß, Schubi

tobster 3. Mär 2004 19:48

Re: Client-Server-Kommunikation im LAN
 
Wenn du dich wirklich nur in einem Subnet aufhältst, dann stosse ich dich mal weg von TCP auf UDP und du denkst mal über Broadcast-Messages nach.

BAHNHOF? :?:

Wie schonmal erwähnt, die Indianer sind nix für mich, kann ich dir nix zu sagen, ich persönlch setze immer die ICS von FPiette ein. Die können u.a. auch auf Ports per UDP lauschen.

Einen Broadcast schickt man wie mit TCP auf die Adresse x.x.x.255 des Subnet bzw. auf 255.255.255.255 ab. Alle deine Clients, die auf dem bestimmten Port lauschen, werden dann deine Msg erhalten, und können sich Beenden. Dein Steuerprogramm kann ja auf einem anderen Port lauschen, um die anderen Meldungen zu empfangen.

Die Userlist bekommst du mit der Kommunikationsmethode ebenfalls: Schicke einfach eine Art Ping per UDP und alle, die was empfangen, schicken ein Pong. Schon hast du alle offenen User.

Schubi 3. Mär 2004 20:28

Re: Client-Server-Kommunikation im LAN
 
Danke!
DAss es auf einen Broadcast hinausläuft, war mir fast klar.

Kannst du mir mehr über diese ICS-Komponenten sagen?
Klingt soweit schonmal sehr interessant, mir gefallen die Indys nämlich auch nicht :mrgreen:

tobster 3. Mär 2004 21:30

Re: Client-Server-Kommunikation im LAN
 
Zitat:

Zitat von Schubi
Kannst du mir mehr über diese ICS-Komponenten sagen?

Nur die Homepage vom Entwickler:
http://www.overbyte.be/

und das da zu jeder einzelnen Komponente ein voll funktionstüchtiges Beispiel-Programm beiliegt, in dem genauestens ersichtlich wird, wie sie benutzt werden. Mehr als komfortabel!

Schubi 4. Mär 2004 09:57

Re: Client-Server-Kommunikation im LAN
 
Danke, funktionieren wunderbar die Komponenten und sind gegenüber den Indys ne Wohltat :mrgreen:

tobster 4. Mär 2004 16:17

Re: Client-Server-Kommunikation im LAN
 
Mein Reden! 8)

Schubi 4. Mär 2004 19:46

Re: Client-Server-Kommunikation im LAN
 
Die Kommunikation klappt schonmal wunderbar. Nur die Broadcasts gehen nicht. die IPs liegen zwischen 10.1.1.101 und 10.1.1.135
Der Broadcast sollte also 10.1.1.255 sein.
Klappt nur leider net. Ich weiß jetzt leider net genau wie das Netzwerk aufgebaut ist bei uns, aber wird wohl ne Bridge oder ein Router oder sonstwas dazwischen liegen.

Kann ich da trotzdem irgendwie nen Broadcast drüberjagen, oder wäre es in dem Fall sinnvoller den Adressbereich einzeln durchzugehen?

tobster 4. Mär 2004 20:46

Re: Client-Server-Kommunikation im LAN
 
Ich habe das ganze mit jeweils zwei WSockets gebaut gehabt, die folgendermaßen gestartet wurden:

Code:
  with wsServer do begin
   Proto := 'udp';
   Addr := '0.0.0.0';
   Port := '16534';
   LocalPort := '0';
   Listen;
  end;
  with wsClient do begin
   Proto := 'udp';
   Addr := '255.255.255.255';
   Port := '16534';
   LocalPort := '0';
   Connect;
  end;
Das bedeutet soviel, das jeder Kommunikationsteilnehmer sowohl auf dem Port lauscht, als auch sich damit verbindet (was mit UDP natürlich physisch nicht wirklich der Fall ist).

Zum Senden nutze ich einfach die Methode SendStr (wsClient) und zum Empfang wird einfach das Ereignis OnDataAvailable (wsServer) genutzt. Das kannst du dir aber aus den Beispielen (UDPLSTN & UDPSEND) rauskopieren, funzt nämlich so schon richtig gut.

Broadcasts funktionieren wie gesagt eigentlich nur innerhalb eines Subnets und werden nicht geroutet. Ausnahmen bestätigen die Regel. Es gibt wohl Router, bei denen man das routen von Broadcasts aktivieren kann.

Schau ansonsten mal, ob du dich mit deiner IP-Adresse im selben Subnets wie die anderen Rechner befindest.

Schubi 4. Mär 2004 21:44

Re: Client-Server-Kommunikation im LAN
 
ich habs von anfang an so gemacht... bin ja net blöd :mrgreen:

Ich hab die IP 10.1.1.89 und will senden an z.B. 10.1.1.113 und so... ist also das gleiche subnet...naja...muss wohl die adressen einzeln durchlaufen, da gehts ja dann

tobster 5. Mär 2004 05:22

Re: Client-Server-Kommunikation im LAN
 
Zitat:

Zitat von Schubi
Ich hab die IP 10.1.1.89 und will senden an z.B. 10.1.1.113 und so...

Das sagt nicht unbedingt, das du dich im selben Subnet befindest, da kann man mit der Subnetmaske noch viel verbiegen.

Mehr fällt mir aber auch nicht mehr ein, ausser, das es eigentlich funktionieren müsste. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Seite 1 von 3  1 23      

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