Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Dateien senden und empfangen

  Alt 16. Nov 2007, 21: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