AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdPeerThread in Indy 10

TIdPeerThread in Indy 10

Ein Thema von STS301 · begonnen am 28. Aug 2008 · letzter Beitrag vom 26. Jul 2010
Antwort Antwort
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#1

TIdPeerThread in Indy 10

  Alt 28. Aug 2008, 12:34
hi

ich versuche gerade das OS Projekt von DataCool in Indy 10 umschreiben, ich habe aber ein Problem beim empfangen.
Delphi-Quellcode:
procedure TfrmMainServer.TcpServerExecute(AThread: TIdPeerThread); //<-- in Indy 10 steht (AContext: TIdContext)
Var sClientMsg : String;
    FileReceiver : TFileReceiver; //diese Definietion kommt von der Filereceiver Unit
begin
   try
      // Clientnachricht lesen
      sClientMsg := AThread.Connection.ReadLn(#$A,5500);
      FileReceiver := TFileReceiver.Create(AThread,sClientMsg);
      try
         // gültige Nachricht vom Client ?
         if FileReceiver.ServerMsgOK then begin
            // Datei jetzt empfangen
            if FileReceiver.Start then
               // Bestätigung zum Clientschreiben
               AThread.Connection.WriteLn('FILEOK')
            else
               // Error-Nachricht schreiben
               AThread.Connection.WriteLn('FILEERROR');
         end;
      finally
         FileReceiver.free;
      end;
   except
      AThread.Connection.Disconnect;
   end;
end;
mein Problem ist es, dass es in indy 10 keinen IdPeerthread mehr gibt, sondern idContext.

in der Filereceiver unit wird der idPeerthread jedoch benötigt

Delphi-Quellcode:
type

   TFileReceiver = Class
      private
         ..
         fLabRe : TLabel;
         // Indy-Server-Thread
         AThread : TIdPeerThread; // <-- hier
         // wichtige Elemente zum Empfangen der Datei
         iFileSize : Cardinal;
         ...
      protected
         //
      public
         ..
   end;
nur wenn ich statt AThread: TIdPeerThread, AContext: TIdContext hineinschreibe bringt das nicht wirklich zum Erfolg.

wie kann ich das Umschreiben oder kennt jemand eine bessere Lösung mit dem selben Ergebnis?

Bitte fragen, falls etwas unverständlich ist
Sebastian

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
bronxy1337

Registriert seit: 25. Jul 2010
3 Beiträge
 
Delphi 2 Desktop
 
#2

AW: TIdPeerThread in Indy 10

  Alt 26. Jul 2010, 12:11
Guten Morgen!

Ich habe das selbe Problem, beide Varianten ausgetestet, undeklarierte Bezeichnungen. Verwende auch Indy 10.

Gruß
bronxy1337
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

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

AW: TIdPeerThread in Indy 10

  Alt 26. Jul 2010, 13:16
Hallo zusammen,

TIdPeerThread muss durch TIdContext ersetzt werden; uses um IdContext erweitern .

Außerdem muss im SourceCode wie folgt vorgegangen werden damit es dann auch wieder unter Indy10 klappt:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
Var sClientMsg : String;
    FileReceiver : TFileReceiver; //diese Definietion kommt von der Filereceiver Unit
begin
  try
    // Clientnachricht lesen
    sClientMsg := AContext.Connection.Socket.ReadLn(#$A,5500);
    FileReceiver := TFileReceiver.Create(AContext,sClientMsg);
    try
       // gültige Nachricht vom Client ?
       if FileReceiver.ServerMsgOK then begin
          // Datei jetzt empfangen
          if FileReceiver.Start then
             // Bestätigung zum Clientschreiben
             AContext.Connection.Socket.WriteLn('FILEOK')
          else
             // Error-Nachricht schreiben
             AContext.Connection.Socket.WriteLn('FILEERROR');
       end;
    finally
       FileReceiver.free;
    end;
  except
   AContext.Connection.Disconnect;
  end;
end;
Also im Prinzip jede Deklaration von TIdPeerThread durch TIdContext austauschen.
Überall wo geschriebe/gelesen wird AThread.Connection mit AContext.Connection.Socket ersetzen und
dort wo eine Verbindung geschlossen werden soll AThread.Connection.Disconnect mit AContext.Connection.Disconect ersetzen.

Das war jetzt die Variante/Umsetzung für den Indy TCP-Server mit Indy10,
Umsetzung/Portierung des Clients sollte sich daraus ableiten lassen.

Mfg DataCool
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 05:49 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