Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei senden über TCP macht nur die halbe Arbeit (https://www.delphipraxis.net/24003-datei-senden-ueber-tcp-macht-nur-die-halbe-arbeit.html)

F.W. 13. Jun 2004 20:43


Datei senden über TCP macht nur die halbe Arbeit
 
Ich habe mir das Bsp aus der Code-Library angesehen und in meinem Prog verwendet. Ich habe es mal mit einer 755 Bytes großen Textdatei gemacht, da hat es noch geklappt. Danach habe ich es mit einer 1,54 MB großen *.doc-Datei (enthielt Bilder) gemacht, da hat's dann schon nicht mehr geklappt. Und mit Wavdateien, egal wie groß, funtzt auch nicht.

Woran liegt's?

celinaw 13. Jun 2004 22:57

Re: Datei senden über TCP macht nur die halbe Arbeit
 
Hi

:gruebel: Du solltest vielleicht mal deinen Code posten!

Der Code aus der Code_Lib scheint jedenfalls in ordnung zu sein!


Gruß Celina

DataCool 14. Jun 2004 10:10

Re: Datei senden über TCP macht nur die halbe Arbeit
 
Hi,

ja poste mal ein bißchen Code oder schau Dir mal mein Bsp. an was ich zu dem Thema hier online gestellt habe :

File Send Beispiel mit Indy

F.W. 14. Jun 2004 14:47

Re: Datei senden über TCP macht nur die halbe Arbeit
 
Hier erstmal der Code:
Delphi-Quellcode:
//Procedure zum Textnachrichten senden:
begin
 try
   TCPClient.Connect(5);
   TCPClient.WriteLn(BN+': '+MsgEdit.Text);
   WriteMsg(BN+': '+MsgEdit.Text); //Zum Chatnachrichten im eigenen Prog in ein RichEdit eintragen
   MsgEdit.Clear;
 finally
   TCPClient.Disconnect;
 end;
end;

//Procedure zum Dateien versenden:
var
  FS: TFileStream;
begin
 if not ODia.Execute then Exit;

 with TCPClient do begin
   FS := TFileStream.Create(ODia.FileName, fmOpenRead or fmShareDenyWrite);
   if MessageDlg('Folgende Datei möchten sie verschicken:'+#13#10#13#10+
                 'Dateiname: "'+ODia.FileName+'"'+#13#10+
                 'Größe: '+MakeSize(FS.Size)+#13#10#13#10+
                 'Möchten sie sie an "'+TCPClient.Host+'" senden?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Exit;
     Connect;
   try
       OpenWriteBuffer;
     try
       WriteLog('Übertrage Dateiinfos...');
       WriteLn('#@#START|'+BN);
       Writeln(ODia.FileName);
       Writeln(MakeSize(FS.Size));
       WriteLog('Dateitransfer beginnt...');
       WriteStream(fs, true, true, 0);
       CloseWriteBuffer;
       WriteLog('Dateitransfer beendet');
     except
       CancelWriteBuffer;
     raise;
     end;
   finally
     Disconnect;
     FS.Free;
   end;
 end;
end;

//Procedure zum Empfangen:
var
  FS: TFileStream;
  SizeOfIncomingStream: integer;
  S, Fromuser, NameofFile, SizeofStream: String;
begin
 SDia.FilterIndex := 1;
 SDia.DefaultExt := '';
 with AThread.Connection do begin
  try
   S := Readln;

   if not (Pos('#@#START', S) = 1) then begin
      WriteMsg(S);
   end;

   if (Pos('#@#START', S) = 1) then begin
      WriteLog('Empfange Datei!'); //Träft auch in Richedit ein, aber in anderer Frabe, daher extra Procedure
      FromUser := CopyFT(S, Pos('|', S)+1, Length(S));
      Write('Sender: '+Fromuser);
      NameofFile := Readln;
      WriteLog('Dateiname: '+NameofFile);
      SizeofStream := Readln;
      WriteLog('Größe: '+SizeofStream);
      if MessageBox(Application.Handle, PChar(FromUser+' schickt ihnen die Datei "'+NameofFile+'", die '+SizeofStream+' groß ist.'+#13#10+#13#10+'Wollen sie sie annehmen?'), 'Frage', MB_YESNO) = IDYes then begin
         SDia.FileName := ExtractFileName(NameofFile);
         if SDia.Execute then begin
            try
              Fs := TFileStream.Create(SDia.Filename, fmCreate or fmShareExclusive);
              SizeOfIncomingStream := ReadInteger;
              WriteLog('Datei wird runtergeladen...');
              ReadStream(fs, SizeOfIncomingStream);
              WriteLog('Transfer erfolgreich abgeschlossen!');
              WriteLog('Datei wurde unter "'+SDia.FileName+'" gespeichert!');
            finally
              Fs.Free;
            end;
         end;
      end;  
   end;
  finally
   Disconnect;
  end;
 end;
end;
Ein Prob war am Anfang, dass unterschieden werden musste, ob eine einfache Nachricht reinkommt, oder eine Datei.

vlees91 14. Jun 2004 15:16

Re: Datei senden über TCP macht nur die halbe Arbeit
 
hab jetzt keine zeit, den quelltext anzugucken, aber vieleicht liegt es daran, dass das nicht mit binär dateien funktioniert, obwohl doc mit Bilder ASCII ist


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