AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Dateien Kommen nur teilweise an!
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien Kommen nur teilweise an!

Ein Thema von Dr0mFr34K · begonnen am 9. Apr 2008 · letzter Beitrag vom 10. Apr 2008
Antwort Antwort
Dr0mFr34K

Registriert seit: 30. Jan 2007
5 Beiträge
 
Delphi 7 Enterprise
 
#1

Dateien Kommen nur teilweise an!

  Alt 9. Apr 2008, 21:32
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:
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;
Server
Delphi-Quellcode:
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;
Vielleicht könnt ihr mir ja helfen wäre echt super!

Bis später!

Mfg Dr0mFr34K
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateien Kommen nur teilweise an!

  Alt 9. Apr 2008, 21:37
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dr0mFr34K

Registriert seit: 30. Jan 2007
5 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Dateien Kommen nur teilweise an!

  Alt 9. Apr 2008, 21:41
hmmmm also meinst du muss das in ne schleife damit der die anderen teile/ packete überträgt bis es fertig is?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Dateien Kommen nur teilweise an!

  Alt 9. Apr 2008, 21:43
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dr0mFr34K

Registriert seit: 30. Jan 2007
5 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Dateien Kommen nur teilweise an!

  Alt 9. Apr 2008, 21:45
ach..ja ok so meinst du das na mal schaun wie ich das mach ..danke schonmal
  Mit Zitat antworten Zitat
Dr0mFr34K

Registriert seit: 30. Jan 2007
5 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Dateien Kommen nur teilweise an!

  Alt 10. Apr 2008, 18:05
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz