Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateisenden per TSocketServer/Client (https://www.delphipraxis.net/96653-dateisenden-per-tsocketserver-client.html)

night 28. Jul 2007 13:50


Dateisenden per TSocketServer/Client
 
Hi, ich veruche eine einfache Datei zu versenden,per TSocketserver/Client. Ich habs auch schon mit den Indys versucht, aber da läuft gar nichts. Selbst bei den Demos kommen viele Fehlermeldungen ... dann habe ichs so versucht:

http://www.dsdt.info/tutorials/winsocket/?page=4

Das Sendtext hat wunderbar funktioniert. Leider geht das mit dem Record nicht so. Ich habe auch hier schon ein paar Lösungswege gefunden, doch leider lief das alles nicht :(.

Mein Record:

Delphi-Quellcode:

  TSendDatei = record
    FName: String[20];
    Datei: TMemoryStream;
Server
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var  Data: TSendDatei;
begin
  Data.Datei.Create;
  Socket.ReceiveBuf(Data,Sizeof(Data));
  Caption := Data.FName;
  Data.Datei.SaveToFile(Data.FName);
  Data.Datei.Free;
end;
Client
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Data: TSendDatei;
begin
  if Opendialog1.Execute then
  begin
    Data.Datei := TMemorystream.Create;
    Data.Datei.LoadFromFile(Opendialog1.FileName);
    Data.FName := Opendialog1.FileName;
    ClientSocket1.Open;
    ClientSocket1.Socket.SendBuf(Data,Sizeof(Data));
    ClientSocket1.Close;
    Data.Datei.Free;
  end;
end;
Es passiert gar nichts. Nichtmal die Caption wird verändert!
Ich hoffe ihr könnt mir weiter helfen.

Mfg night

gsh 28. Jul 2007 14:35

Re: Dateisenden per TSocketServer/Client
 
hab nur mal kurz drübergeschaut und beim server muss es nicht
Delphi-Quellcode:
Data.Datei.Create;
sondern
Delphi-Quellcode:
Data.Datei := TMemorystream.Create;
heißen

//edit:
1. würd ich des auch alles unter try finally tun weil es sonst sein könnte des es nicht freigegeben wird
2. ich glaub nicht das das so funkt da imho im record nur der pointer auf die daten gespeichert wird und der auf einem anderen pc natürlich nicht gültig ist

Muetze1 28. Jul 2007 14:49

Re: Dateisenden per TSocketServer/Client
 
Der angesprochene 2. Punkt gilt vor allem auch für den Memorystream im Record. Dort wird nur die Instanzenadresse übertragen aber nicht die Instanz geschweige denn die Daten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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