Entwickler-Ecke

Internet / Netzwerk - Über Delphi7 Tcp Socket eine Timage übertragen


Sithlord - Mi 21.10.09 01:51
Titel: Über Delphi7 Tcp Socket eine Timage übertragen
Hallo Mitglieder,

habe um diese frühe Uhrzeit schon die Suche bemüht um einen Weg zu finden, ein auf der Form plazierte Timage komponente per TCP-IP iwohin zu übertragen. Das Iwohin beläuft sich auf eine andere Form eines anderen Programmes, wieder in eine Timage komponente.

Wie ist sowas möglich? Es sollte auch nicht "lange" dauern, eh das bild da ist.

Welche Ansätze gibt es da um was zu verschicken?
Ich verlange keinen ganzen QUellcode, für kleinere Tipps und Kniffe vl. auch bisschen Quellcode wäre ich dankbar, aber ich will Delphi lernen und möchte es deswegen selbst versuchen, auch wenn es nicht klappen sollte.

Mfg Kalle


jaenicke - Mi 21.10.09 08:33

Schau dir am besten einmal dieses Tutorial an, dann wird vielleicht manches klarer. ;-)
http://www.delphi-library.de/viewtopic.php?p=401124


Sithlord - Mi 21.10.09 12:04

WoW danke, ich lasse die Frage aber trotzdem nochmal offen - nun heißt es sich belesen ^^


Sithlord - Mi 21.10.09 13:30

Sooo,
hab mich mal selbst bemüht und fast Erfolg gehabt ;)

Dies sendet mir es an meinen Server:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Timer1Timer(Sender: TObject);
var
stream:tstream;
begin
  MakeScreenShot(Image1.Picture.Bitmap);
  Image1.Repaint;
  Stream := TMemoryStream.Create;
  Stream.Position := 0;
  image1.Picture.Graphic.SaveToStream(stream);
  client.Socket.SendStream(stream);
  stream.Free;
end;


Und dieses lässt es beim Server auslesen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.serverClientWrite(Sender: TObject;
  Socket: TCustomWinSocket);
var
stream:tstream;
Buffer: array of Byte;
Len: Int64;
begin
Stream := TMemoryStream.Create;
Len := Socket.ReceiveLength; //enthält die größe des zu empfangenden buffer
  SetLength(Buffer, Len);
  try
    Len := Socket.ReceiveBuf(Buffer[0], Len);
    if Len > 0 then
      Stream.Write(Buffer[0], Len);
  finally
    SetLength(Buffer, 0);
    image1.Picture.Graphic.LoadFromStream(stream);
    Image1.Repaint;
    stream.Free;
  end;
end;



Mfg Kalle

Edit: Hat sich herausgestellt eben dass sie auf einmal nicht mehr mit Fehlern um sich werfen sondern der Client mir sagt "invalid pointer operation" o.ä. ;)
Fällt euch dazu was ein?


Xentar - Mi 21.10.09 13:52

Wie in dem anderen Thread
http://www.delphi-forum.de/viewtopic.php?t=94722
schon erwähnt, musst du erst die Länge als Integer bzw. Int64 schicken, und dann auf Empfängerseite diese Anzahl an Zeichen warten und einlesen.
Hat also nichts mit ReceiveLength zu tun.


Sithlord - Mi 21.10.09 14:00

Mhhh stimmt auch wieder, nach reichlichem belesen.
Aber ich stehe auch iwie auf dem schlauch, wie ich die Länge mitgeben soll...

Naja ich sollte wohl nicht solche Projekte machen ^^. Aber wir müssen wegen der Schule screenshots verschicken, der lehrer meinte dies sei leicht -.-

Aber iwie komm ich da nicht weiter, auch wenn ich jetzt weiß dass es stück für stück auslesen muss.

Bloß wie stück für Stück und dann noch die richtige Länge?

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.