Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client / Server ....... Denkfehler?.... komme nicht weiter (https://www.delphipraxis.net/117457-client-server-denkfehler-komme-nicht-weiter.html)

Jackie1983 18. Jul 2008 13:33


Client / Server ....... Denkfehler?.... komme nicht weiter
 
hi,

komme irgendwie nicht weiter, vielleicht ein Denkfehler oder ich denke einfach zu kompliziert. :)

Habe mir dank eines Tutorials ein Protokoll geschrieben welches über die TClientSocket und TServerSocket versendet wird. Das Protokoll steht und ist soweit fehlerfrei, hoffe ich.

Bei meiner Client / Server Anwendung werden immer wieder Daten vom Client zum Server gesendet. Jetzt möchte ich ja auch sicher gehen das die Daten ankommen. Also habe ich mir eine kleine pingpong Komponente geschrieben. Funktioniert auch wunderbar, vor rausgesetzt der Server ist immer Online.

Nur was ist wenn es keine Verbindung zum Server gibt, sei es weil das Kabel mal kurz gezogen wurde oder das DSL abgeschmiert ist. Klar ich muss die Verbindung trennen und neu aufbauen, nur DAS funktioniert leider so nicht. Noch zur Info. Habe eine Client/Server Klasse und eine PingPong Klasse.

Der Ablauf ist recht simpel:

Server geht Online
Pong im Server geht Online

Client geht Online
Ping im Client geht Online

Client will senden
sendet Ping
wenn vom Server ein Pong kommt Daten senden.

Fertig.

Wenn kein Pong kommt könnte ich die Verbindung neu aufbauen...... aber irgend wie........
naja vielleicht kann mir ja hier noch jemand einen denk anstoß geben.....
thx

RavenIV 18. Jul 2008 13:49

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
Wenn das Pong nicht kommt, kann der Client keine Daten senden.
Also muss er solange Ping senden, bis das Pong kommt.

Dies kann er unterschiedlich handhaben:
- unendlich lange, mit gleichem Zeitabstand zwischen den Pongs
- unendlich lange mit wachsenden Zeitintervall
- bis zu einer definierten Zeit, mit gleichem Zeitabstand zwischen den Pongs
- bis zu einer definierten Zeit, mit wachsenden Zeitintervall
- es wird einmal versucht, bei Fehler (kein Pong) wird ne Meldung angezeigt und erst auf User-Input wieder versucht

Nun musst Du Dich entscheiden, fünf Felder sind frei. ;-)

Jackie1983 18. Jul 2008 13:55

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
wenn aber eine Verbindung zwischen client und server besteht und das kabel wird z.b. kurz gezogen muss ich doch erst wieder offline und dann wieder online mit dem client gehen. Oder?

Also
Server Online
Client Online
Verbindung ok

Daten werden gesendet ok

kabel wird gezogen
Client will senden kein pong, keine verbindung.

kabel wieder ok

Client will daten senden.
da ja kein pong mit Client offline gehen
Client versucht wieder online zu gehen
Daten senden

oder sehe ich da was falsch.

QuickAndDirty 18. Jul 2008 14:01

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
ändert sich denn die ip Adresse beim Kabelziehen?
TCP/IP Ist unterhalb der Sitzungsebene soweit ich weiß und sollte somit damit klarkommen.
Was ist mit deinem Protokoll kommt es damit klar? Wenn es keine Sitzung aufbaut sollte das kein Problem sein.

RavenIV 18. Jul 2008 14:03

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
Im Prinzip hält man eine Verbindung nur so lange offen, wie man sie braucht, um Daten zu übertragen.

Also:
- Verbindung aufbauen
- wenn Verbindung klappt, dann Daten senden
- Daten werden immer mit ACK oder NAK vom Server bestätigt
- Wenn kein ACK kommt, Daten erneut senden
- wenn x-mal kein ACK gekommen ist, dann Fehlerprotokoll und abbrechen
- wenn alle Daten gesendet wurden, dann Verbindung abbauen
- evtl prüft der Server die Daten, bevor er ein ACK sendet

QuickAndDirty 18. Jul 2008 14:05

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
Und genau deswegen ist ja auch der PING unnötig. Das würde höchstens bei UDP/IP Sinn machen.

Jackie1983 18. Jul 2008 14:27

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
ok, aber ich möchte gerne vom Server aus wissen welche Clients Online sind.
Oder wenn ich vom Server Daten an den Client senden möchte, dann geht das nicht bzw. wenn die clients sich Daten untereinander senden möchten.

ich könnte alle x Sekunden mit dem Client nachschauen am Server nachschauen ob es Daten gibt, aber eine super tolle Lösung ist das auch nicht.....

Jackie1983 18. Jul 2008 14:32

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
bei einem Chat wird die Verbindung doch auch aufrecht gehalten und nicht getrennt.....

Jackie1983 21. Jul 2008 09:45

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
kann mir da keiner auf die Sprünge helfen.....
Möchte keinen fertigen Code sondern vielleicht hinweise, Tipps, pseudocode.....

Nur das die grauen zellen bei mir anfangen zu arbeiten :)

p80286 21. Jul 2008 15:08

Re: Client / Server ....... Denkfehler?.... komme nicht weit
 
Hallo Jackie1983,

vielleicht waren die Antworten nicht so ganz klar, aber es kommt auf das Protokoll an mit dem die Daten versendet werden. Wenn Du (bzw. Dein Programm) ein "verbindungsloses" benutzt, dann werden die Daten abgeschickt und gut ist. Online würde bedeuten, das, auch wenn nichts los ist, sich Server und Client permanent unterhalten. Also jede Menge unnötiger Traffic erzeugt wird.
Was spricht dagegen ein ganz normales Timeout zu nutzen, und wenn es erreicht ist, dann ist der Server eben down?
Und warum interessiert es ob ein Client "online" ist? Für gewöhnliche Büroanwendungen ist das ziemlich egal. Anders sieht es mit z.B. Produktionssteuerung aus, aber die laufen auch meist nicht mit normalem Ethernet.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.
Seite 1 von 2  1 2   

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