Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP und Write-/ReadStream-Methode (https://www.delphipraxis.net/9011-indy-tcp-und-write-readstream-methode.html)

OrallY 16. Sep 2003 16:38


Indy TCP und Write-/ReadStream-Methode
 
Hallöchen. Nachdem Meflin in diesem Thread nachgefragt hat, wie man Dateien über TCP und den Indys verschickt, habe ich folgendes Beispiel gepostet. Doch bekomme ich immer bei der ReadStream-Methode einen EReadError ("Stream read error").

Da ich als letztes in den Thread von Meflin gepostet habe und dieser nicht als unbeantwortet gekennzeichnet ist, hab ich jetzt einfach einen neuen Thread aufgemacht, um auf das bis dato ungelöste Problem aufmerksam zu machen.

(Ich war der Ansicht, dass beim alten Thread leicht der Glaube entstehen könnte, dass er beantwortet ist. Und weil ich Meflins Problem lösen will, was nun auch zu meinem geworden ist, hab ich jetzt die Initiative ergriffen. Wenn die Moderatoren anderer Meinung sind, bitte :mrgeen:)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  if not OpenDialog1.Execute then exit;
  with IdTCPClient1 do
  begin
    fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
    Connect;
    try
      WriteStream(fs);
    finally
      Disconnect;
      fs.Free;
    end;
  end;
end;

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  fs: TFileStream;
begin
  if not SaveDialog1.Execute then exit;
  fs := TFileStream.Create(SaveDialog1.Filename, fmCreate or fmShareExclusive);
  with AThread.Connection do
    try
      ReadStream(fs);
    finally
      Disconnect;
      fs.Free;
    end;
end;

DataCool 17. Sep 2003 10:31

Re: Indy TCP und Write-/ReadStream-Methode
 
Hi,

versuch mal in der procedure Button1Click folgendes einzubauen :

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  if not OpenDialog1.Execute then exit;
  with IdTCPClient1 do
  begin
    fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
    try
      Connect;
      if Connected then begin
        try
          // Write Buffer öffnen
          OpenWriteBuffer;
          // Stream in Buffer schreiben
          WriteStream(fs);
          CloseWriteBuffer;
          // Buffer schliessen, Buffer wird dann automatisch abgeschickt
        except // fehlermeldung end;
      end;
    finally
      Disconnect;
      fs.Free;
    end;
  end;
end;
Gruß Data

OrallY 17. Sep 2003 16:07

Re: Indy TCP und Write-/ReadStream-Methode
 
Danke, aber hat leider nix geholfen. Es tritt immer noch der selbe Fehler auf :|.

(Nach Indy-Hilfe modifiziert):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
begin
  if not OpenDialog1.Execute then exit;
  with IdTCPClient1 do
  begin
    fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
    Connect;
    try
      OpenWriteBuffer;
      try
        WriteStream(fs);
        CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;
  end;
end;

OrallY 17. Sep 2003 16:25

Re: Indy TCP und Write-/ReadStream-Methode
 
Lösung hier: http://www.delphipraxis.net/internal...?p=72324#72324

Christian Seehase 17. Sep 2003 16:28

Re: Indy TCP und Write-/ReadStream-Methode
 
Moin OrallY,

probier's mal mit fmOpenReadWrite beim FileStream.

Ich hab' an der gleichen Stelle einen MemoryStream, und damit geht's.

OrallY 17. Sep 2003 16:38

Re: Indy TCP und Write-/ReadStream-Methode
 
Ich hatte das auch schon mit einem MemoryThread probiert, aber das hat bei mir nicht geklappt :|.
Eine Lösung des Problems gibts, wenn du dem Link folgst. So funktionierts, auch wenn ich den Grund nicht kenne ;):


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 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