AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi nach versenden mit indy datei unbrauchbar
Thema durchsuchen
Ansicht
Themen-Optionen

nach versenden mit indy datei unbrauchbar

Ein Thema von m0sch3r · begonnen am 5. Mär 2006 · letzter Beitrag vom 5. Mär 2006
Antwort Antwort
m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#1

nach versenden mit indy datei unbrauchbar

  Alt 5. Mär 2006, 17:47
Tach an alle, ich habe ein Problem

der download von Dateien mit indy Server und clinet, klappt super, die filegröße bleibt die selbe - ABER
die Datei ist unbrauchbar, die gif'S kann man nicht mehr angucken..!!

habe grade noch mal getestet mit mp3's, die Wiedergabe ruckelt, sie werden zwar abgespielt aber aber mit stottern..))) die Qualität ist nicht mehr die gleiche..!!

Hatte jemand das gleiche Problem...!?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: nach versenden mit indy datei unbrauchbar

  Alt 5. Mär 2006, 18:07
HI,
also ehrlich gesagt ist deine Frage etwas ungenau formuliert. Ich habe jedenfalls keine Probleme mit Indy. Bleibt für dich eventuell die Frage, welche Delphi Version, welche Indy Version und welche Betriebssysteme ich damit schon am laufen hatte und vielleicht auch wie die Daten übertragen wurden, aber da sagst du ja auch nichts

Aber hab nicht in Erinnerung, schon häufiger etwas über von Indy verursachte Probleme beim Dateiversenden/empfangen gehört zu haben. Und bei Digitalen Musikdateien wie MP3s liegt der Qualitätsverlust sicher nicht am übertragen von Daten sondern am verändern eben dieser. Je nach Dateiformat kommen Interpreter unterschiedlich gut mit falschen Daten klar. Nimm dir am besten Testweise mal eine kleine Datei (z.B. einfacher Text), verschick die und vergleich die Empfangenen Daten mit denen die du gesendet hast. Bei gif oder ähnlichem bietet sich dann natürlich eher ein HexEditor an. Dort solltest du dann leicht sehen, ob die Daten auch die gleichen sind.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: nach versenden mit indy datei unbrauchbar

  Alt 5. Mär 2006, 18:29
ich habe jetzt eine Sache herausgefunden.

die Satei wird stückweise übertragen

Server
Delphi-Quellcode:
 while (FileSize > 0) AND (not Fehler) do
                            begin
                            SendSize := FileSize;
                            if SendSize > PaketSize then SendSize := PaketSize;
                            FileSize := Filesize - SendSize;
                            try
                               Athread.Connection.OpenWriteBuffer;
                               Athread.Connection.WriteStream(FStream, false, true, SendSize);
                               Athread.Connection.CloseWriteBuffer;
                               //Updaten des Statusbars
                            except
                               fehler := true;
                               WriteByte(Athread, cZhopa);
                               break;
                            end; // try-except

                            end; // while
sendize ist in diesem Fall 20*1024

und wird empfangen von client auch stückweise in der gleichen Größe

Delphi-Quellcode:
 while (FileSize > 0) and (not fehler) do
                                  begin //20*1024
                                    if PaketSize > FileSize then PaketSize := FileSize; //Wenn die DAtei kleiner ist als 20 kb
                                    try
                                       Fclient.ReadStream(FStream, PaketSize);
                                       FileSize := FileSize - PaketSize;
                                    // Fstream.Position := FileSize;
                                    except
                                       fehler := true;
                                       WriteByte(cLogOut);
                                       Downloads.PSetStatusOfDownloadFile(cLogOut, Fclient);
                                       Fclient.Disconnect;
                                       Break;
                                    end; // except
                                   end; // while
wenn ich die Größe ändere von 20*1024 auf 1000*1024 verringert sich die Anzahl, der Aussetzer im lied sehr.

habe noch mal getestet mit word dokummenten, word kann sie nicht mehr öffnen...

wie kann man das erklären..!?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: nach versenden mit indy datei unbrauchbar

  Alt 5. Mär 2006, 19:28
Nun ja, du benutzt wahrscheinlich ein Protokoll, das Paketbasiert ist (natürlich bei fast allen Protokollen für's Netz der Fall). Wie gesagt, verschick doch einfach mal eine Textdatei und schau dir an was ankommt.

Delphi-Quellcode:
  if FClient.ReadStream(FStream, PaketSize) <> PaketSize then
    begin
      // ups, Fehler.
    end;
Aber wichtiger ist, es handelt sich um ein Verbindungsloses Protokol. Du weißt nicht, wann die Datei komplett übertragen ist. Das Event, dass etwas ankommt wird wahrscheinlich mehrfach ausgelöst werden. Das heißt für dich, dass du wissen solltest welche Dateigröße du erwartest. Du hast zwar eine Kapselung, die dir den Transport abnimmt, aber du musst da schon ein wenig eigenes Protokoll mit implementieren.
Dazu sind zwei Dinge wichtig, du solltest alle Nachrichten die du verschickst mit einem Anfang und Ende kennzeichnen, damit du immer genau weißt wo deine Nachricht anfängt und wo sie endet (auch die kommen in Stückchen an). Damit verschickst du vorab die Nachricht, dass du eine Datei verschickst, die eine gewisse Größe hat (und gibst die Größe an). Nun wartest du am besten auf eine Bestätigung (dass die Datei erwartet wird). Dein Client wüßte dann wie groß die Datei sein soll, kann also in Ruhe warten bis die Datei vollständig übertragen wurde und erst dann alle Bytes übertragen.
Am einfachsten solltest du aber auch hier Anfang und Ende deiner Daten eindeutig kennzeichnen. Damit bist du sicher vor Fehlern. Dann suchst du als Startposition die Bytefolge, die deinen Datenanfang markiert und kopierst ab dieser Stelle. Natürlich kommt Word und co nicht mit defekten Headern zurecht, da können schon ein zwei falsche Bytes extreme Auswirkungen haben. Nimm zum Beispiel ein Tiff-File, die ersten zwei Bytes geben die Byteorder an, wenn die beschädigt ist, könntest du die zwar erraten, aber wäre keine gute Idee, oder?
  Mit Zitat antworten Zitat
m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: nach versenden mit indy datei unbrauchbar

  Alt 5. Mär 2006, 19:58
Danke für die Antwort...))))
bin jetzt ein Stück weiter gekommen, und zwar, in jedem File was ich bekomme, sind die Ersten vier Byte defekt..!!!!

wenn ich beim Client, vor dem stream lesen die Vier Byte einlese sind die gedownloadeten Daten perfekt.
Das ist aber keine lösung des Problemms, ich habe mir die Server seite angeschaut, wo ich denn die vier Byte(int) zu falschen zeit sende. Habe keinen Fehler gefunden. Vieleicht findet ihn jemmand von euch...

Bin trotzdem für jeden Vorschlag dankbar..
  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 23:42 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