AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Dateien senden und empfangen

Dateien senden und empfangen

Ein Thema von Karg · begonnen am 15. Nov 2007 · letzter Beitrag vom 20. Nov 2007
 
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Dateien senden und empfangen

  Alt 16. Nov 2007, 20:34
Ok, dann mal weiter mit den Listen...

1. Du greifst von TForm9 auf TForm1 zu - sehr böse...
2. Globale Variable filemode? Die passt auch in das Formular Form1 o.ä.
3. Im Download1Click solltest du filemode auf fileverwaltung setzen - wenn nicht gerade ein Download läuft (z.B. erkennbar, wenn der Stream <> nil ist)
4. Es ist sehr schlechter Stil, wenn du immer wieder auf die erste Verbindung vom Server zugreifst. Wie willst du denn jemals andere Clients auseinander halten? Nutze die in der OnClientRead Methode übergebene Socket Instanz, diese ist immer genau der Socket aus dem Connections[] Array, für den er was empfangen hat.
5. Deine OnClientRead scheint gekürzt zu sein. Ich sehe nicht wo du "buf" füllst. Vor allem stellt sich mir die Frage, wie du das machst. Ich vermute ReceiveText - dies wäre aber in deinem Falle eine mehr als schlechte Wahl, da du Text und Binärdaten mischt. ReceiveText gibt dir alles im Puffer existierende als String zurück - dabei macht der Socket keine Unterscheidung ob das Daten oder Texte sind - das weiss er schliesslich nicht. Darum musst du dich kümmern und entsprechend ein Protokoll bauen. Das hast du soweit auch gemacht, aber da es Text ist, hast du ein Problem. Wenn er nun "<FILEONWAY>1024smdgjkg hjkghwjk" empfängt, was machst du denn? Die "smdgjkg hjkghwjk" sind schon der Anfang der Dateidaten. Ich hatte dir schon zuvor geschrieben, dass es keine Reihenfolge gibt, wie du die Daten empfängst. Dein Sleep beim senden ist zwar recht nett, nützt aber überhaupt nichts. Es funktioniert bei dir lokal oder vllt. noch im LAN, aber das wars dann auch.
6. Wenn du mit ReceiveText buf empfängst im OnClientRead, dann hast du dort jedesmal schon Teile der Datei (alles was er derzeit empfangen hat) im string von ReceiveText. Danach wäre es Glück, wenn er nebenbei noch wieder was empfangen hat und somit ReceiveLen wieder > 0 ist.
7. Wie schon zuvor erwähnt: Sleep(200) ist völlig nutzlos und irrelevant beim Server. Er sendet die Daten und wenn dein Netzwerk mal etwas belastet ist, werden die Daten eh zusammen geschmiert. DU musst das ganze teilen - nun weiss mal wo. Wieviele Zeichen ist denn die Dateigrösse lang? Wieviel Zeichen willst du einlesen ohne schon bytes von der Datei zu lesen?
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz