![]() |
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 |
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. ;-) |
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. |
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. |
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 |
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.
|
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..... |
Re: Client / Server ....... Denkfehler?.... komme nicht weit
bei einem Chat wird die Verbindung doch auch aufrecht gehalten und nicht getrennt.....
|
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 :) |
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 23:07 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