Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

Dateien versenden mit Indy (Win 98 <-> 2000/NT/XP)

  Alt 21. Nov 2004, 12:53
Hi@all

Ich benutzte den Standard - Indy - Code für das senden von Dateien von Client an Server, allerdings habe ich folgendes Problem: Auf dem einen Rechner ist Windows 2000, auf dem anderen 98. Auf einem dritten ist NT4.
Wenn ich dateien von 2000 nach 98 über mein Programm schicke, läuft alles wie vorgesehen, wenn ich allerdings von 98 auf 2000 oder NT Daten (also filestream) schicke, hängt sich der 98 - Client bei Dateien die größer als 0,5mb sind, auf...jemand ne ahnung warum? Auf beiden Rechner kommt exakt das gleiche Programm zur Anwendung!

Zwischen 2000 und NT ist das Daten schicken absolut kein Problem.

Hier die entsprechenden Routinen:


Der Client-Code:

Delphi-Quellcode:
Idtcpclient1.writeln('~fsm'+opendialog1.filename); <--Hier wird dem Server der Dateiname übergeben

memo1.lines.add('Trying to send File '+filename1 + ' to the remote computer');

  with IdTCPClient1 do
  begin

    fs := TFileStream.Create(filename1, fmOpenRead); //Datei in FileStream einlesen
     try
      OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
      try
       WriteStream(fs, true, true); <--- Hier bleibt Windows 98 hängen!!!
        CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      fs.Free;
      Disconnect;
    end;
      memo1.lines.add('Transfer done!');
  end;


 end;
Entsprechend der ServerCode (Client und Server sind in einem Programm untergebracht):

Delphi-Quellcode:
text:=AThread.Connection.ReadLn();

typ:=copy(text,0,4);

if typ='~fsmthen begin
dateiname:=copy(text,pos('~fsm',text)+4,length(text)-4);
dateiname:=extractfilename(dateiname);
filename1:=dateiname;
endung:=copy(dateiname,pos('.',dateiname),length(dateiname)-pos('.',dateiname)+1);
savedialog1.FileName:=filename1;
savedialog1.Filter:=(endung+'|'+endung);


//FILES EMPFANGEN
 with AThread.Connection do
    try
     fs := TFileStream.Create('C:\filestream.tmp', fmCreate or fmShareExclusive);
            SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
      ReadStream(fs, SizeOfIncomingStream); //und übergeben
    finally
      fs.Free;
      streamsend:=False;
      Disconnect;
      end;

    AThread.Synchronize(speichern_unter);



exit;
end;
Wäre cool wenn jemand ne Idee hätte, hab allerseits die Indy Version 9.00.17.src und hoffe, ich muss keine andere installieren, weil das ja immer nen Aufstand ist...

Liebe wochenendlichen Grüße,

Euer Alleinherrscher
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat