![]() |
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 |
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. |
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: |
Re: Client-Server-Kommunikation im LAN
Zitat:
![]() 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! |
Re: Client-Server-Kommunikation im LAN
Danke, funktionieren wunderbar die Komponenten und sind gegenüber den Indys ne Wohltat :mrgreen:
|
Re: Client-Server-Kommunikation im LAN
Mein Reden! 8)
|
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? |
Re: Client-Server-Kommunikation im LAN
Ich habe das ganze mit jeweils zwei WSockets gebaut gehabt, die folgendermaßen gestartet wurden:
Code:
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).
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; 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. |
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 |
Re: Client-Server-Kommunikation im LAN
Zitat:
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 13:37 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