AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Datei senden über TCP macht nur die halbe Arbeit
Thema durchsuchen
Ansicht
Themen-Optionen

Datei senden über TCP macht nur die halbe Arbeit

Ein Thema von F.W. · begonnen am 13. Jun 2004 · letzter Beitrag vom 14. Jun 2004
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Datei senden über TCP macht nur die halbe Arbeit

  Alt 13. Jun 2004, 21:43
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?
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#2

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

  Alt 13. Jun 2004, 23:57
Hi

Du solltest vielleicht mal deinen Code posten!

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


Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

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

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

  Alt 14. Jun 2004, 11:10
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#4

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

  Alt 14. Jun 2004, 15:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von vlees91
vlees91

Registriert seit: 19. Apr 2004
843 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 14. Jun 2004, 16:16
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
vlees91
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:24 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