AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Server/ClientSocket - Stabile Verbinung für mehrere Stunden?
Thema durchsuchen
Ansicht
Themen-Optionen

Server/ClientSocket - Stabile Verbinung für mehrere Stunden?

Ein Thema von romber · begonnen am 28. Okt 2004 · letzter Beitrag vom 29. Okt 2004
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Server/ClientSocket - Stabile Verbinung für mehrere Stunden?

  Alt 28. Okt 2004, 12:57
Hallo!

Auf dem Server-Rechner läuft eine TServerSocket-Anwendung. Diese schickt ab und zu Daten an alle verbundeten Clients. In der StatusBar des Server-Programms bekomme ich immer Anzahl der verbundeten Clients. Es kann so passieren, dass ich die Server-Programm ab und zu neustarten muss, weil diese praktisch noch in Entwicklung ist. Dabei warten die Clients auf den Server und sobald der Online ist, wird wieder verbunden. Beim Testen mit mehreren Clients ist mir aufgefallen, dass nicht alle gestarteten Clients wieder verbunden werden, wenn der Server neu gestartet ist.

Ich mache es so: jeder Client hat einen Timer, der jede 5 Sekunden überpfüft, ob die Verbindung zum Server besteht. Wenn nicht, wird versucht, diese herzustellen.

Code:
if not ClientSocket.Socket.connected then
try
ClientSocket.Open
except end;
Ich habe eigentlich nicht viel Ahnung von Sockets. Hat jemand vielleicht ein Paar übersichtliche Code-Beispiele für mich, die mir weiterhelfen konnten? Ich würde gerne eine Stabile Verbindung zwischen dem Server und Client aufbauen, die mehrere Stunden erhalten wird, auch wenn keine Daten gesendet werden. Und der Client soll auf den Server warten, wenn dieser mal offline ist.

Danke!

MfG,
Ralf
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#2

Re: Server/ClientSocket - Stabile Verbinung für mehrere Stun

  Alt 28. Okt 2004, 18:26
Kann mir niemand helfen?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Server/ClientSocket - Stabile Verbinung für mehrere Stun

  Alt 28. Okt 2004, 18:45
Hi romber,

erstens solltest du erst nach 24 Stunden pushen

Zweitens könntest du ja ein Serversocket ins Clientprogramm bauen, und sobald der Server nach einem Neustart wieder online geht, geht er eine zuvor gespeicherte Liste von IPs durch, verbindet sich zu jeder, sendet ein Signal und trennt die Verbindung dann wieder. Anschließend kann sich der Client wie gehabt verbinden.
Eine andere Möglichkeit ist es über UDP zu lösen, da dort der "Server" einen Broadcast an alle Clients senden kann, welche bei Erhalt der Broadcastnachricht sich wieder verbinden.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Server/ClientSocket - Stabile Verbinung für mehrere Stun

  Alt 28. Okt 2004, 23:11
Moin!

Zum anderen löst Open meist keine Exception aus, da Open nur einen Befehl an den Thread weiter gibt, der dann parallel zu deinem Open Aufruf später eine Exception schmeissen wird. Daher: nutze den OnError CallBack...

MfG
Muetze1
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: Server/ClientSocket - Stabile Verbinung für mehrere Stun

  Alt 29. Okt 2004, 10:47
Erstmal Vielen Dank für eure Antworten!

Zitat von Muetze1:
Daher: nutze den OnError CallBack...
@Muetze1: Das mit "OnError CallBack" habe ich nicht ganz verstanden. Köntest du bitte etwas mehr erklähren? Danke!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Server/ClientSocket - Stabile Verbinung für mehrere Stun

  Alt 29. Okt 2004, 11:23
Moin!

Wenn die durch die Open Methode veranlasste Verbindung zum Server fehl schlägt, dann musst du schon sehr viel Glück und Rechenzeit haben, dass diese Exception noch bei Ausführung der Open Methode auftritt. Im Normalfall tritt die Exception zeitlich später auf, also wenn der Hauptprogrammablauf schon an deinem Try / Except Konstrukt vorbei ist. Daher solltest du das OnError Ereignis der Komponente benutzen, um Verbindungsfehler zu erkennen bzw. zu unterdrücken. In dem OnError Ereignis kannst du die Ausgabe der Fehlermeldung mit dem auf 0 setzen der ErrorCode Variable verhindern (die dir übergeben wird) und auch z.B. den Timer wieder anstellen, damit dieser wieder 5 Sekunden wartet. Wenn kein Fehler auftritt, dann wird dir das OnConnect / OnAccept Ereignis darüber berichten...

Du solltest den Timer bis zu einem definiertem Ergebnis (OnError, OnAccept/OnConnect) der Verbindungsaufnahme aus lassen, weil du die Sockets durcheinander bringst bei einer reentranten Nutzung. Ausserdem kannst du nie wissen wie lange der Verbindungsaufbau dauert - manchmal kann es auch schonmal dauern einen Namen aufzulösen...

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 Uhr.
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