AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy10 IdTCPServer und IdTCPClient
Thema durchsuchen
Ansicht
Themen-Optionen

Indy10 IdTCPServer und IdTCPClient

Ein Thema von ASKtec · begonnen am 7. Nov 2008 · letzter Beitrag vom 7. Nov 2008
Antwort Antwort
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#1

Indy10 IdTCPServer und IdTCPClient

  Alt 7. Nov 2008, 14:08
Hallo zusammen,

ich experiementiere schon seit Tagen mit den o.g. Komponenten rum. Ich habe eine Serverapplikation und 3 verschiedene Clients.

Ein Client nimmt Daten aus einer DB und schickt diese zum Server. Dort werden diese Daten an alle verbundenen Clients verschickt und die letzten Daten für neue Clients immer zwischengespeichert.

Ein weiterer Client verbindet sich in Abständen von 5 Sekunden zum Server, sendet ein "HELO" und bekommt dann die Daten des ersten Clients...

Einen dritten Client habe als Chatclient ausgelegt, der einmal ein Connect zum Server macht und die Verbindung hält bis das Programm geschlossen wird.

Wenn ich alle Clients so programmiere, dass beim starten eine Verbindung zum Server geöffnet wird und diese erst beim beenden des Clients geschlossen wird, funktioniert alles bestens. Nur wenn aus irgendwelchen Gründen die Verbindung zum Server verloren geht, bekomme ich den Reconnect nicht mehr hin

Also dachte ich mir, ich lege die ersten beiden Clients so aus, dass diese immer nur in bestimmten Abständen zum Server connecten und dann ihre Daten senden bzw. empfangen und anschließend wieder disconnecten. Leider funktioniert das auch nicht zuverlässig.

- Beim ersten Client sollte das alle 3-4 Minuten passieren. Der erste Connect funktioniert, aber keine weiteren.
- Beim zweiten Client funktionieren im Schnitt etwa 20 Connect`s und danach ist Schluss (alle 5 Sekunden)

Nur der 3.te Client der dauerhaft verbunden ist funktioniert weiterhin. Ich muss Client 1 und 2 neu starten und dann geht das Spiel von vorne los...

Am liebsten wäre mir eine Lösung, bei der alle Clients verbunden bleiben. Wenn dann irgendwie die Verbindung zusammenbricht (z.B. Server beendet) sollte der Client weiter versuchen einen Reconnect durchzuführen.

Leider finde ich keine Lösung. Ich habe auch schon im Forum und in Nachbarforen gesucht und nichts gefunden. Viele Beispiele beziehen sich auch auf Indy9....

Kann mir jemand bitte bei dem Problem behilflich sein? Evtl. hat auch schoneinmal jemand eine Reconnect Routine für diese Komponenten umgesetzt?

Die Routine zum connecten ist wie folgt aufgebaut und wird in einem Timer aufgerufen, allerdings noch mit einer if-Abfrage gekoppelt (es wird nicht bei jedem Timer-Event connected):

Delphi-Quellcode:
    try
      with IdTCPClient1 do
        begin
          connect;
          IOHandler.WriteLn('HELO:client xy');
          sleep(200);
          IOHandler.WriteLn('INFO:' + text);
          disconnect;
        end;
     except
       // Fehler auf Form anzeigen
     end;
Ich danke Euch schon einmal im voraus...

Andreas
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Indy10 IdTCPServer und IdTCPClient

  Alt 7. Nov 2008, 14:23
Ich habe das einfach so das ich folgende Struktur habe:

Clientanwendung -> Kommunikationsmodul

Das Kommunikationsmodul ist eine eigene Klasse.
Wird die Verbindung verloren, wird das Objekt der Klasse zerstört und immer wieder versucht neu zu verbinden.
Glückt die Verbindung wird das Objekt so lange gehalten wie die Verbindung da ist.

Dadurch ist es recht einfach den Status der Verbindung anzuzeigen, da man nur schauen muss ob ein Kommunikationsobjekt vorhanden ist.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#3

Re: Indy10 IdTCPServer und IdTCPClient

  Alt 7. Nov 2008, 17:38
Hallo,

danke für die schnelle Antwort. Leider bin ich noch nicht so wirklich fit was "Klassen schreiben"... Wie muss ich da genau ansetzen?

Es wäre schön wenn man das an einem Stück Quellcode nachvollziehen könnte

Wenn ich doch eine Klasse habe und das Objekt zerstöre wenn es nicht mehr funktioniert, müsste es dann nicht auch funktionieren, wenn ich das Objekt IdTCPServer1 zerstöre und neu mit "IdTCPServer1 := TIdTCPClient.Create" neu erstelle???

Gruß
Andreas
  Mit Zitat antworten Zitat
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#4

Re: Indy10 IdTCPServer und IdTCPClient

  Alt 7. Nov 2008, 22:17
OK, habe das Problem nun gelöst.

Scheinbar hat die Indy-Komponente ein Problem wenn man diese auf das Form zieht.

Ich habe nun die Komponente selbst erstellt. Kommt es zum Disconnect dann führe ich ein Destroy aus und erstelle die Komponente sofort wieder neu. Danach connected sie ohne Probleme....

Hier mal die entsprechende Prozedur dafür:

Delphi-Quellcode:
procedure TForm1.CheckConnection;
begin
  //Versuch etwas an den Server zu schicken
  try
    IdTCPClient1.IOHandler.WriteLn('NOOP:');
  except
    StatusBar1.Panels[0].Text := 'connection failed';
 
    //Client abschiessen und neu bauen
    IdTCPClient1.Destroy;
    IdTCPClient1 := TIdTCPClient.Create();
    // Ports und IP-Adresse des Servers holen aus ini-Datei)
    LoadSettings;

      try
        IdTCPClient1.Connect;
        IdTCPClient1.IOHandler.WriteLn('HELO:ichbins');
        StatusBar1.Panels[0].Text := 'connected';
      except
        StatusBar1.Panels[0].Text := 'last connect failed';
      end;
    end;
end;
Gruß und Danke
Andreas
  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 09:44 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