AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TCP-Server von Indy 9 auf 10 bringen

TCP-Server von Indy 9 auf 10 bringen

Ein Thema von Carsten Hölscher · begonnen am 30. Mär 2021 · letzter Beitrag vom 31. Mär 2021
Antwort Antwort
Carsten Hölscher

Registriert seit: 29. Jul 2008
40 Beiträge
 
Delphi 11 Alexandria
 
#1

TCP-Server von Indy 9 auf 10 bringen

  Alt 30. Mär 2021, 00:11
Ich bin leider gezwungen, meine tadellos funktionierenden Netzwerkfunktion von Indy 9 auf 10 zu bringen, da Indy 9 die webDAV-Komponente nicht hat. Wie schon im Nachbarthema besprochen, ist die Doku dazu leider eher übersichtlich. Vielleicht hilft ja ein kleiner Überblick über meine bereits erfolgreichen Schritte mal anderen. Also in Indy 9 definiert man seinen eigenen Thread
Delphi-Quellcode:
TMeinThread = class(TIdPeerThread)
  procedure MacheWas;
end;
In Indy 10 geht das so:
Delphi-Quellcode:
TMeinThread = class(TIdThreadWithTask)
  procedure MacheWas;
end;
Dann hat man in Indy 9 eine TIdTCPServer-Komponente benutzt und vor dem möglichen Aufbau der Verbindung
IdTCPServer1.ThreadClass:=TMeinThread;
definiert. Damit wurde für jede eingehende Verbindung eine Instanz von TMeinThread erzeugt.

In Indy 10 braucht man für dieses Verhalten neben der Serverkomponente noch eine Komponente TIdSchedulerOfThreadDefault und stellt beim Server die Eigenschaft Scheduler auf diese Komponente. Und wieder vor dem möglichen Aufbau der Verbindung:
IdSchedulerOfThreadDefault1.ThreadClass:=TMeinthread;

In der execute-Methode kam man unter Indy 9 folgendermaßen an seinen Thread:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
begin
  TMeinthread(AThread).MacheWas;
end;
Unter Indy 10 geht das so:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
  TMeinthread(TIdYarnOfThread(AContext.Yarn).Thread).MacheWas;
end;

Und jetzt hab ich den Eindruck, dass sich das Verhalten der connection was geändert hat. Unter Indy 9 war das ja ein member des Threads. Ich hab es jetzt als eigenes Member ergänzt und setze es beim connect auf AContext.Connection, um dann später Daten drüber zu verschicken/empfangen.
Meine Anwendung macht dafür einen weiteren Thread zum Versenden, der nicht blockierend ist, während das Lesen der Daten im "TMeinthread" blockieren ist. Beides nutzt j dieselbe connection, was bisher auch tadellos lief. Jetzt verhält sich das Ganze aber seltsam. ich hab's noch nicht ganz durchdrungen, es scheint aber so zu sein, dass der Sendethread auch auf den Lesethread rückwirkt oder sowas.
Kann mir jemand einen Denkanstoß geben?

Carsten
  Mit Zitat antworten Zitat
Carsten Hölscher

Registriert seit: 29. Jul 2008
40 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TCP-Server von Indy 9 auf 10 bringen

  Alt 31. Mär 2021, 02:08
Mein Problemwar wohl nur ein dummer Programmierfehler. Also da läuft sonst alles wie früher, wenn man meine Änderungen oben eingebaut hat.

Carsten
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf