Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateien per Server/Clientsocket versenden (https://www.delphipraxis.net/21056-dateien-per-server-clientsocket-versenden.html)

Neuni 27. Apr 2004 13:33


Dateien per Server/Clientsocket versenden
 
Hallo zusammen...folgendes Problem.

Ich hab hier im Forum schon geguckt, aber nur beispiele und themen bezüglich IdTCP gefunden...
mein Problem ist, dass Indy irgendwie nicht richtig läuft, und dass ich lieber Serversocket bzw. Clientsocket gebrauchen würde.
Hat jemand sowas schonmal gemacht, oder hat jemand ne Idee, wie man das ganze machen könnte?

Danke schonmal im vorraus

alcaeus 27. Apr 2004 13:55

Re: Dateien per Server/Clientsocket versenden
 
Ja, ich hab was gemacht, aber durch einen Festplattencrash gibts den code nicht mehr. In den Grundzügen habe ich es ohne Streams gelöst, also so:
Dateitransfer Server->Client
S=Server, C=Client

Hier eine Liste was gesendet wird
S: Dateigröße in Bytes
C: Ok
S: Sende Block <Nummer> mit <Größe> Bytes
C: Send
S: Daten
C: verifiziert Größe, falls Größe stimmt, Ok schicken, ansonsten Resend
S: Sendet im Notfall den Block nochmals, andernfalls geht er zum nächsten

Am Ende:
S: EoF
C:Ok

So müsste die Kommunikation gehen, die Daten kannst du mit SendBuffer senden, versuch mal, die Kommunikation aufzubauen, falls du Probleme hast helfe ich gerne

Neuni 27. Apr 2004 13:58

Re: Dateien per Server/Clientsocket versenden
 
Wofür braucht der Client denn die dateigröße in Bytes???

alcaeus 27. Apr 2004 14:01

Re: Dateien per Server/Clientsocket versenden
 
Um am Ende verifizieren zu können, dass alles gepasst hat, denn es könnte ja auch die Blockgröße durch einen Übertragunsgfehler geändert werden, dabei gehen zufällig auch noch die gleiche Anzahl Bytes verloren, und die Datei ist fehlerhaft. Laut Murphy ist dies alles möglich. Weiß der Client die Größe der Datei, kann er alles verifizieren.

Muetze1 27. Apr 2004 14:12

Re: Dateien per Server/Clientsocket versenden
 
Moin!

Ausserdem muss er ja wissen wieviel Bytes er aus dem Stream lesen muss bzw. erwarten kann - sonst weiss er ja nicht, wann Schluss ist...

MfG
Muetze1

alcaeus 27. Apr 2004 14:13

Re: Dateien per Server/Clientsocket versenden
 
Ja, das wäre die jeweilige Blockgröße, aber die Gesamtdateigröße muss am Ende mit der Summer der Blockgrößen zusammenstimmen, gleich wie die Blockgröße mit der Anzahl von Nutzbytes im Block übereinstimmen muss. Die Anzahl Bytes, die gelesen werden muss gibt mir auch das Socket zurück.

Muetze1 27. Apr 2004 14:21

Re: Dateien per Server/Clientsocket versenden
 
Moin!

Zitat:

Zitat von alcaeus
Die Anzahl Bytes, die gelesen werden muss gibt mir auch das Socket zurück.

Du meinst ReceiveLength - ja, ok. Aber damit weisst du immernoch nicht, wann Schluss ist. Auch das du die Datei in Blöcke unterteilst muss nicht sein, da die Blöcke meist eh nicht als ein solcher Block beim Empfänger ankommen sondern meistens noch weiter geteilt - und es gibt auch nirgends eine Garantie für die zusammenhängende Blöcke...

MfG
Muetze1

fiasko 27. Apr 2004 14:23

Re: Dateien per Server/Clientsocket versenden
 
Ähm, wozu nehmt ihr dann eigentlich noch das TCP-Protokoll? Das ist für die Transportsicherung zuständig und sorgt dafür das alles korrekt läuft. Wenn die Verbindung nicht abbricht kommt beim Empfanger alles genau so raus wie es der Sender reingeschickt hat. Die Serversocket sind aber nicht grad tolle Komponenten scheinen manchmal Müll zu machen, dafür würde ich lieber direkt die WinSock API ansprechen.

alcaeus 27. Apr 2004 14:24

Re: Dateien per Server/Clientsocket versenden
 
Ich habe das ganze einmal probiert, bei einer internet Blocklänge von mehr als 8 KB ging nichts mehr weiter..., 8KB war bei mir das Maximum, deswegen die Blöcke. Außerdem bist du als Anwendungsprogrammierer dafür zuständig, dass die Netzwerkkarte die Daten versandbereit enthält. Der Karte eine 100 MB-Datei vor die Füße werfen nenne ich nicht gerade versandbereit...:mrgreen:

fiasko 27. Apr 2004 14:30

Re: Dateien per Server/Clientsocket versenden
 
Zitat:

Zitat von alcaeus
Außerdem bist du als Anwendungsprogrammierer dafür zuständig, dass die Netzwerkkarte die Daten versandbereit enthält. Der Karte eine 100 MB-Datei vor die Füße werfen nenne ich nicht gerade versandbereit...:mrgreen:

Quark, da sind die Leute die den TCP-Stack geklaut haben dafür zuständig :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 Uhr.
Seite 1 von 3  1 23      

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