JPEG übertragen via Socket

Alcatraz

Grünschnabel
Ich möchte ein JPG-Bild über WinSocket schicken.
Ich habe folgenden Code:

Typen-Deklaration:
Code:
type
  TYaimRec = record
    Text: String[200];
    Img: TGraphic;
end;


Versenden beim Client:
Code:
Rec.Text:='IMG';
  image1.Picture.Graphic.LoadFromFile('C:\test.jpg');
  Rec.Img:=image1.Picture.Graphic;
  Client.Socket.SendBuf(Rec,sizeof(Rec));


Empfangen beim Server:
Code:
Socket.ReceiveBuf(Rec,SizeOf(Rec));
  if rec.Text='IMG' then begin
    rec.img.SaveToFile('C:\test_received.jpg');
  end
  else showmessage(Rec.Text);


Wieso funktionniert das nicht?
Beim speichern am Server
Code: markieren
Code:
rec.img.SaveToFile('C:\test_received.jpg');
bekomm' ich eine Access violation.

mfG;
 
Die Accessviolation kommt daher, dass du kein legales TGraphic-Objekt angelegt hast. Statt dessen greifst du einfach auf eine Variable zu, in der keine gültige Referenz drin steht. Denk dran, die Instanz einer TGraphic-Klasse ist kein einfacher Record. Du musst die Bilddaten schon selbst übertragen. Das bloße Übertragen der Objektreferenz in rec.img hilft da nicht.

-Gawayn
 
Zurück