![]() |
Dateien Kommen nur teilweise an!
Hey Leute!
Habe da nen Problem hab eine kleine CLient - Server Applikation geschreiben, um auf meinen PC auf arbeit von Zuhause zugreifen kann. Ich wollte soeben eine FUnktion einbauen um Dateien zusenden. Die Verzeichnisse anzeigen kann ich , nur wenn ich die datei sozusagen downloaden will hab ich dann eine Datei auf dem PC die nur immero so 1,4 kb groß ist..hier mal der COde zu den Funktionen: Ach noch zu erwänen ist dass ich von CLient zu Server connecte also der CLient ist auf Arbeit und der Server bei mir..also eine Art wie heißt das ..ich glaube Reverse oder so, damit ich meinen DynDns nutzen kann..so jetzt aber der COde! Client
Delphi-Quellcode:
Server
procedure TForm1.VerifyDataReceived(Data: string; Socket: TCustomWinSocket);
var COMMAND,TMP_COMMAND, l, rc: Integer; tmpAnswer, user, version:string; Reg: TRegistry; label Finish; begin COMMAND:=StrToIntDef(Copy(Data,1,3),-1); if COMMAND < 0 then begin Exit; end; TMP_COMMAND := -1; Data := Copy(Data,4,Length(Data)); if COMMAND = COMMAND_FILE then begin TMP_COMMAND := COMMAND_FILE; tmpAnswer:=GetFile(Data); goto Finish; end else --------------------------- Get FIle function function TForm1.GetFile(const PathName: string): string; var fs : TFileStream; begin fs := TFileStream.Create(PathName, fmOpenRead or fmShareDenyWrite); SetLength(Result, fs.Size); fs.Read(Result[1], fs.Size); fs.Free; end; --------------------------- Sende Methode (also damit werden die daten an server gesendet) procedure TForm1.SendAnswer(COMMAND: Integer; strAnswer: string; Socket: TCustomWinSocket); begin try Socket.SendText(FormatFloat('00#',COMMAND) + strAnswer); except Socket.Close; end; end;
Delphi-Quellcode:
Vielleicht könnt ihr mir ja helfen wäre echt super!
procedure TMainForm.VerifyData(Data: string);
var COMMAND:integer; begin COMMAND := StrToIntDef(Copy(Data,1,3),-1); if COMMAND < 0 then Exit; Data := Copy(Data,4,Length(Data)); if COMMAND = COMMAND_FILE then begin Assert(FileForm <> nil); (FileForm as TFilesForm).SetFileData(Data); Exit; end; -------------------------------- Send Methode zu CLient procedure TMainForm.SendCommand(COMMAND: Integer; Args: string); begin if ConnectionsListBox.itemindex <> -1 then begin if ServerSocket1.Active then try ConnectionID := ConnectionsListBox.Itemindex; ServerSocket1.Socket.Connections[ConnectionID].SendText(FormatFloat('00#',COMMAND) + Args); except end else LogMemo.Lines.add('You''re not connected...'); end else showmessage('You must first select a client to send the command to'); end; Bis später! Mfg Dr0mFr34K |
Re: Dateien Kommen nur teilweise an!
Der relevante Teil fehlt. Ich denke mal du bist bisher davon ausgegangen das in den Events von TServerSocket und TClientSocket jeweils die ganze Datei ankommt. Letztendlich ist es aber so das die Datei in mehreren Stücken/Packeten ankommt und dafür jedes mal das Ereignis aufgerufen wird.
|
Re: Dateien Kommen nur teilweise an!
hmmmm also meinst du muss das in ne schleife damit der die anderen teile/ packete überträgt bis es fertig is?
|
Re: Dateien Kommen nur teilweise an!
keine Schleife. Du musst dir einfach ein Protokoll ausdenken damit du weißt wann das letzte packet angekommen ist. Oder du schickst zuerst die Größe der Datei und schreibst dann so lange alle kommenden Daten in die Datei bis die Größe erreicht ist (das wäre die einfachste Variante)
|
Re: Dateien Kommen nur teilweise an!
ach..ja ok so meinst du das na mal schaun wie ich das mach ..danke schonmal
|
Re: Dateien Kommen nur teilweise an!
Sorry for doppelpost aber hatte oben noch was vergessen und zwar den empfang von der datei im server
das geschieht hiermit
Delphi-Quellcode:
procedure TFilesForm.SetFileData(const FileData: string);
var fs : TFileStream; begin SaveDialog1.FileName := CurFile; if SaveDialog1.Execute then begin fs := TFileStream.Create(SaveDialog1.FileName, fmCreate); fs.Write(FileData[1], Length(FileData)); fs.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 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