![]() |
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 |
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 |
Re: Dateien per Server/Clientsocket versenden
Wofür braucht der Client denn die dateigröße in Bytes???
|
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.
|
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 |
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.
|
Re: Dateien per Server/Clientsocket versenden
Moin!
Zitat:
MfG Muetze1 |
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.
|
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:
|
Re: Dateien per Server/Clientsocket versenden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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