![]() |
Image über Socket verschicken
Hi,
ich versuche seit längerer Zeit den Inhalt eines TImage über die normalen TSockets zu verschicken, bekomm aber keinen gescheiten Ansatz hin. Aber ich will auch keine Indy benutzen, ich würde es sehr bevorzugen, wenn ich die Sockets nehmen kann. Also als eigenen Ansatz habe ich mir schon mal das Sendstream angeschaut, bin aber nicht wirklich weiter gekommen... Denke mal ich muss dass dann irgendwie mit Recivebuf empfangen. Hoffe mal ihr könnt mir irgendiwe helfen.... :-D PS: Ich würde eine Variante bevorzugen, in der ich Datein auswählen und verschicken kann, dann würd ich das Image einfach speichern... |
Re: Image über Socket verschicken
Hallo,
vielleicht ist ja Image selbst nicht so gut als Ansatz. Hast du es mal mit dessen Eigenschaft Picture probiert?
Delphi-Quellcode:
Getippt und nicht getestet.
type
TPictureEx = class(TPicture); procedure TDemoForm.ButtonClick(Sender: TObject); var s: TStream; begin s := TMemoryStream.Create; try TPictureEx(Image.Picture).SaveToStream(s); s.Position := 0; TCPClient.WriteStream(s); finally s.Free; end; end; Grüße vom marabu |
Re: Image über Socket verschicken
sorry :( , aber ich meinte tserversocket und tclientsocket
Gruß Masteric |
Re: Image über Socket verschicken
Ja und? Ist doch vom Prinzip genau das gleiche. Nur das die Methode dort nicht WriteStream() sondern SendStream() heißt. Wie sieht denn dein bisheriger Ansatz aus? Wir kauen dir hier keinen kompletten Quellcode vor, wo doch Marabu schon das gesamte Procedere schon gezeigt hat.
|
Re: Image über Socket verschicken
also das mit senden ist ja nicht das Problem...
Wenn ich das Bild so sende wie oben beschrieben, was muss ich dann machen um es zu empfangen??
Delphi-Quellcode:
so? und dann den stream in ein timage laden um es anzuzeigen??
var s: TStream;
begin Socket.ReceiveBuf(s, sizeof(s));
Delphi-Quellcode:
hoffe mal, dass das so richtig ist.... :roll:
Image1.Picture.Bitmap.LoadFromStream(s);
Gruß Masteric |
Re: Image über Socket verschicken
Warum probierst du es nicht einfach aus?
|
Re: Image über Socket verschicken
yo das hab ich ^^ :)
und es geht nicht :pale: also es kommt nichts an.... :roll: Ich weiss einfach nicht wie ich das Bild empfangen soll :wall: Gruß Masteric |
Re: Image über Socket verschicken
Was heißt es kommt nichts an?
Herrgott lass dir doch nicht alles aus der Nase ziehen! Ein wenig mehr Quelltext wäre auch nicht schlecht. Wird das OnReceiver-Event gefeuert? Kommt er überhaupt bei der Codestelle beim Server an? Wird es gesendet? Steht die Verbindung? Kommt ein Fehler? |
Re: Image über Socket verschicken
Die Sockets übertragen einfach nur Byte für Byte. Dabei ist nur die Reihenfolge der Bytes wichtig und diese wird auch eingehalten. Wenn du auf der einen Seite zweimal was schickst, kann dies in einem Stück beim Empfänger ankommen aber genauso gut in 20 kleineren Teilen. Von daher musst du auf Empfangsseite mehrfach was empfangen und dann wieder zusammenfügen, bis du alle Daten zusammen hast. Und von daher müsste der Empfänger erstmal wissen wie groß die Daten sind, sprich: wieviel er sammeln muss, bis er die Daten komplett empfangen hat. Mit anderen Worten: Du musst dir ein Protokoll ausdenken was sich genau darum kümmert und diese Informationen zu den Daten mit übermittelt.
Delphi-Quellcode:
TStream ist eine Variable welche intern nur einen Zeiger auf das Objekt hat. Dies lässt sich auch dadurch feststellen, dass SizeOf() dir immer 4 Bytes liefert. Dieser Zeiger zeigt auch erst auf ein gültiges Objekt, wenn du es mit dem Konstruktoraufruf angelegt hast. Somit kann dein Aufruf nicht funktionieren - bisher überschreibst du einfach deine Variablen bzw. Code mit Datenmüll.
var s: TStream;
begin Socket.ReceiveBuf(s, sizeof(s)); Zur Funktion ReceiveBuf() findet man im Forum genug Beispiele, ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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