Autor Beitrag
daimoi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 04.04.10 23:20 
Hey,
da ich lange suchen musste und nur veralteten Mist gefunden habe, möchte ich hier ein Code Schnipsel veröffentlichen, wie man sowas realisieren könnte (getestet mit Embarcadero Delphi 2010 und den beigelieferten Indy Komponenten).

Client:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button1Click(Sender: TObject);
var
  jpg : TJpegImage;
  FStream: TMemoryStream;
begin
  FStream := TMemoryStream.Create;
  jpg.SaveToStream(FStream);
  jpg.Free;
  FStream.Position := 0;

  Client.Connect;
  try
    Client.IOHandler.Write(FStream,0,true);
  finally
    Memo1.Lines.Add('Screenshot verschickt!');
    Client.Disconnect;
  end;
  FreeAndNil(FStream);
end;



Server:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm4.FileServerExecute(AContext: TIdContext);
var
  jpg : TJpegImage;
  FStream: TMemoryStream;
begin
  FStream := TMemoryStream.Create;
  jpg := TJpegImage.Create;
  try
    AContext.connection.IOHandler.ReadStream(FStream);
    FStream.Position := 0;
    jpg.LoadFromStream(FStream);
    jpg.SaveToFile('test.jpg');
  finally
    AContext.connection.Disconnect;
  end;
  FreeAndNil(FStream);
end;

Viel Spaß damit ;)

Moderiert von user profile iconKha: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Titel geändert, war: "[Code Schnipsel] Bild(er) über Indy TCP übertragen !".
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: So 04.04.10 23:43 
Wenn ich einige Verbesserungsvorschläge äußern darf:
- Längenangabe als Integer vorweg schicken. Somit weiß der Server, auf wie viele Byte er warten muss.
- Beim Abspeichern keine relativen Dateipfade verwenden.

_________________
PROGRAMMER: A device for converting coffee into software.
daimoi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: So 04.04.10 23:57 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich einige Verbesserungsvorschläge äußern darf:
- Längenangabe als Integer vorweg schicken. Somit weiß der Server, auf wie viele Byte er warten muss.
- Beim Abspeichern keine relativen Dateipfade verwenden.


Danke, Verbesserungsvorschläge natürlich immer erwünscht. Ich dachte durch den dritten Wert bei Client.IOHandler.Write(FStream,0,true); (hier das true nach der 0) würde das automatisch gehen ?
Hast du evtl. einen Code wie ich die Größe berechne, sende und dann beim Server verwerten könnte? (Muss gestehen, dass ich nicht viel Erfahrung mit den Indy Komponenten habe ..)

Das Abspeichern soll hier nur ein Beispiel sein wie man den empfangenen Stream weiterverarbeiten kann.