![]() |
Datenübertragung Sendbuf....
Hi, habe folgendes problem.. ich möchte eine datei von meinem client zum server übertragen..
Die ganze sache functioniert auch wunderbar, jedoch ist diese datei, welche beim server ankommt unbrauchbar... also ich habe mir eine mp3 geschickt, die danach allerdings nicht mehr zu lesen war vom player.. ich schicke mal den code dazu.. ich hoffe mir kann jemand helfen was ich falsch mache.. danek suncezz !! Clienet : ///////////////////////
Code:
Server //////////////////////
procedure TForm1.Button4Click(Sender: TObject);
var datei1: tfilestream; buff : array[1..1024] of byte; groese : integer; begin groese := 0; if opendialog1.Execute then begin datei1 := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); repeat datei1.Read(buff,sizeof(buff)); clientsocket1.Socket.SendBuf(buff,sizeof(buff)); groese := groese + sizeof(buff); until groese > datei1.Size; datei1.Free; end; end;
Code:
Ich habe die VErmutung das er mit den ersten bytes irgendwas falsch macht .. vlt kann mir ja jemand helfen.. danker schonmal im voraus,
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); var datei : tfilestream; fname : string; buff : array[1..1024] of byte; groese : integer; begin fname := 'C:\Dokumente und Einstellungen\Administrator\Desktop\ManuelsTestOrdner\sendet.mp3'; datei := TFileStream.Create(fname, fmCreate or fmShareExclusive); groese := datei.Size; repeat serversocket1.Socket.Connections[0].ReceiveBuf(buff,sizeof(buff)); datei.Write(buff,sizeof(buff)); until datei.Size > 500000; // wird noch behoben, bin mir aber sicher das es daran nicht liegt.. datei.Free; end; mfg suncezz |
Re: Datenübertragung Sendbuf....
Mmh ich habe mal etwas ähnliches geschrieben und die Typen folgendermaßen gewählt...
Buffer: array [0..9999] of Char; fSize: Int64; ob das dir groß weiter hilft kann ich nicht versprechen :) |
Re: Datenübertragung Sendbuf....
Deine Schleife zum Senden der Daten missachtet die Tatsache, dass die Datei ja nicht unbedingt ein Vielfaches von 1024 Bytes sein muss.
Deine Funktion würde also immer aufrunden und damit am Ende der Datei Müll übertragen. Hier die Korrektur, die ich aber nicht getestet, sondern nur so eingetippt habe:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var datei1: TStream; buff : array[0..1023] of byte; // arrays, die mit Untergrenze 0 beginnen sind effizienter bytes : integer; begin if opendialog1.Execute then begin datei1 := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); repeat bytes := datei1.Read(buff[0],sizeof(buff)); // das Ergebnis von .Read() muss immer ausgewertet werden if bytes > 0 then clientsocket1.Socket.SendBuf(buff[0], bytes); until bytes = 0; datei1.Free; end; end; |
Re: Datenübertragung Sendbuf....
Geht das nicht einfacher mit 'SendStream'?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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