Entwickler-Ecke
Internet / Netzwerk - Bild über Indy TCP übertragen
daimoi - So 04.04.10 23:20
Titel: Bild über Indy TCP übertragen
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:
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:
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
Kha: Delphi-Tags hinzugefügt
Moderiert von
Narses: Titel geändert, war: "[Code Schnipsel] Bild(er) über Indy TCP übertragen !".
Xentar - 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.
daimoi - So 04.04.10 23:57
Xentar hat folgendes geschrieben : |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!