AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdTCPClient: Software caused connection abort.
Thema durchsuchen
Ansicht
Themen-Optionen

IdTCPClient: Software caused connection abort.

Ein Thema von alleinherrscher · begonnen am 12. Jul 2006 · letzter Beitrag vom 13. Jul 2006
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

Re: IdTCPClient: Software caused connection abort.

  Alt 13. Jul 2006, 09:37
Hi,

erstmal danke für die Anerkennung *lol*

Erstmal muss ich vorweg sagen, das ich mit Delphi6 und Indy9 arbeite und Du verwendest Indy10.
Aber das sollte nicht das Problem seien, die Logik zu analysieren.

Ich habe jetzt gerade Deine Source-Code überflogen und dabei habe ich einige Sachen gefunden die ich anders machen würde(besser liegt ja im Auge des Betrachters )

1. Die Idee mit der Que ist ja nicht schlecht, aber warum bastelest Du die so ein kompliziertes Konstrukt ?
Warum arbeitest Du nicht mit TList, TObjectList oder TThreadList ?
Dort hast Du schon eine fertige Klassen die Listen jeglicher Art verwalten. TThreadList ist sogar schon Threadsafe!

2. Bei Button Click fügst Du 5 mal die gleiche Datei für den gleichen Server in die Que warum ?

3. Anstatt des Timers solltest Du auf jeden Fall mit einen Thread arbeiten.

4. Warum die ganzen globalen Variablen ? Die gehören in die Hauptklasse.

Zu Deinem Hauptproblem:

Da ich leider kein Indy10 installiert habe kann ich das ganze leider nicht debuggen sondern nur tippen.
Du schreibst/schickst beim Write die Größe des Streams mit und beim Read liesst Du erst die Größe des Streams aus und liesst dann exakt die Anzahl von Bytes in den Stream. Das kann so richtig seien, aber in Indy9 muss ich wenn ich die Byte Größe des Streams mitgeschickt habe beim Lesen vorher nicht die Größe mitauslesen, das hat Indy automatisch gemacht. Du könntest in Deinem Fall bis zum Disconnect Lesen, den Dein Server liesst ja immer nur Daten und danach wird disconnected.

Also, ich würde eine komplette Klasse schreiben die alles was mit dem Client zu tuen hat verwaltet.
Innerhalb dieser Klasse würde ich eine Unterklasse schreiben die von TThread Abgeleitet ist und Deine "Abarbeitungsliste" in TThreadlist verwaltet.
Im Execute des Thread würde ich dann prüfen ob gerade Elemente in der Liste vorhanden sind, wenn ja das erste Element aus der Liste Lesen, aus der Liste entfernen und zum Server schicken.
Wenn er fertig ist mit verschicken das ganze wieder von vorne, also ne schleife drum machen

Hoffe das ganze hilft Dir ein wenig weiter, mehr kann ich leider ohne Indy10 und Höhere Delphi Version nicht sagen.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 00:00 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