![]() |
Netzwerkprogramm, wie aufbauen?
Hallo,
ich möchte ein Programm schreiben, dass folgendes kann: ich habe 4 PCs (PC1, PC2, PC3, PC4). Auf PC1 soll ich gleichzeitig etwas an alle anderen PCs schicken können. Diese sollen das automatische empfangen und reagieren (z.B. etwas zu PC1 zurückschicken). Wie soll ich das Strukturieren? Müssen alle PCs server UND client sein? Soll ich die Sockets oder die Indys nehmen? |
Re: Netzwerkprogramm, wie aufbauen?
Ja, du schreibst sozusagen nur ein Programm, was du dann auf alle 4 PCs draufmachst. Das enthält dann einen Server zum empfangen und einen Client zum Versenden!
|
Re: Netzwerkprogramm, wie aufbauen?
Und wie soll ichs mit dem senden, bzw mit dem Verbinden am besten machen, also eine permanente Verbindung oder immer unmittelbar vor dem Senden verbinden und dann wieder trennen?
|
Re: Netzwerkprogramm, wie aufbauen?
verbunden bleiben
mit tcp/ip die clients verbinden sich alle mit dem multithreaded tcp server nach aufbauen der verbindung kann in beide richtungen kommuniziert werden client seitig für den empfang muss ein selbst erstellter thread herhalten der in einer endlosschleife readln macht und der server hat ein ereignis fürs empfangen (on execute) und fürs senden einfach in einer schleife alle connecteten clients durchgehen und writeln machen das war speudocode *g* |
Re: Netzwerkprogramm, wie aufbauen?
Wenn ich mit den Sockets arbeite, TServerSocket hat doch ein Ereignis beim Empfangen, oder?
Jetzt muss ich nur noch rausfinden, wie man einen multithreaded Server erstellt :) |
Re: Netzwerkprogramm, wie aufbauen?
Hi,
ich würde mal sagen, eine permanente Verbindung macht (insbesondere bei TCP/IP) wenig Sinn. An sich sollte man möglichst Ereignisorientiert arbeiten. Bei zustandslosen Protokollen kann es schwer werden eine Verbindung permanent zu halten (geht einfach gar nicht). Natürlich kannst du beliebig lange readln machen, aber es macht (imho) wenig Sinn. Damit wird ein solcher Rechner immens viel Zeit (alles was frei ist) damit verbringen auf eine Nachricht zu warten. Da du eher nicht mit ein paar Mhz neue Nachrichten verschickst (geschweige denn mit ein paar GHz), verschwendest du damit eigentlich nur Ressourcen. Natürlich muss jeder Server (auch Serversocket) auf eine Anfrage reagieren können, in Delphi gibt es dieses Ereignis für dich schon gekapselt. Wenn du nun ein Programm schreibst, dass als Server dient, der die Rundnachrichten verschickt, kannst du natürlich einfach an alle eingetragenen Empfänger etwas verschicken. Das heißt, ein Server kann sowohl empfangen als auch verschicken. Bietet sich doch irgendwie an, den auch gleich für die "Clients" zu benutzen. Wenn du auch dort Server verwendest, kannst du also leicht auf Nachrichten vom eigentlichen Server reagieren und diesem auch Antworten und das ganze ohne jegliche Art von polling (schont die CPU immens). Natürlich kann man auch in eine gewissen Interval pollen (mittels Readln), aber dann ist dann die Intervalgrenze eine Schwierigkeit. Wartest du zu lange, so wirst erst verzögert auf ein Ereignis reagieren, ist das Interval zu kurz, kommt es sehr häufig zu unnötigen Aufrufen, optimal ist es natürlich einfach auf ein Ereignis zu reagieren. Was Threading angeht, da hat Luckie ein Tutorial für. Gruß Der Unwissende |
Re: Netzwerkprogramm, wie aufbauen?
da ich mein denken auf den indy tcp server/client bezogen hatte, muss ich hier mal diese aussagen ein wenig in frage stellen:
Zitat:
|
Re: Netzwerkprogramm, wie aufbauen?
So, hab mich jetzt mal intensiver damit beschäftigt. Schreibe das ganze nun in C#, aber das spielt keine Rolle (der Aufbau bleibt der selbe).
Bis jetzt bin ich so weit: Server-Programm: Nach dem Start wird ein Thread gestartet, der auf anfragende Clients jeweils einen neuen Thread erstellt, welcher die Verbindung mit einem Client verwaltet (für jeden Client einen extra Thread). Client-Programm: Das Abrufen einer ankommenden Message wird mittels eines Threads, der in einer Schleife den Buffer ausliest, realisiert. Das Senden vom Server zum Client klappt somit auch schon, aber ich hab noch Probleme: 1. Die PCs werden alle gleichzeitig eingeschaltet, d.h. es kann sein, dass dass die Clients VOR dem Server da sind. Was soll ich dann machen? 2. Wie soll ich den "Rückweg" realisieren. Meine Idee war, dass wenn ein Client auf dem Server "geadded" wird, dass dann der Client seinerseits einen Server startet und der Server ne Anfrage an den Client schickt. Aber das Hauptproblem ist Nr. 1, weiß nicht so recht wie ich das machen soll, wenn die Clients zuerst da sind... |
Re: Netzwerkprogramm, wie aufbauen?
zu 1:
du versuchst zu connecten -> schlägt fehl -> timer für reconnect starten, der alle 10 sec neu probiert zu connecten -> ist connected -> timer anhalten falls gestartet zu 2: genau so wie der hinweg sobald eine tcp verbindung aufgebaut ist kannst du mit den vorhandenen instanzen der clients und server IN BEIDE RICHTUNGEN kommunizieren da brauchst du nicht unnötiger weise im client nochmal einen server instanziieren oderso. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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