AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Image über Socket verschicken
Thema durchsuchen
Ansicht
Themen-Optionen

Image über Socket verschicken

Ein Thema von Masteric · begonnen am 28. Jan 2008 · letzter Beitrag vom 29. Jan 2008
Antwort Antwort
Masteric

Registriert seit: 1. Aug 2007
Ort: Melsungen
155 Beiträge
 
Delphi 7 Professional
 
#1

Image über Socket verschicken

  Alt 28. Jan 2008, 17:55
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....

PS: Ich würde eine Variante bevorzugen, in der ich Datein auswählen und verschicken kann, dann würd ich das Image einfach speichern...
"Programmieren ist eine der universellsten, allübergreifendsten und höchsten von Menschen erreichten Formen der Kreativität."
Nur weil Gott die Welt in 6 Tagen erschaffen hat, heisst das nicht, dass Informatiker alles in 6 Tagen programmieren können.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 19:08
Hallo,

vielleicht ist ja Image selbst nicht so gut als Ansatz. Hast du es mal mit dessen Eigenschaft Picture probiert?

Delphi-Quellcode:
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;
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Masteric

Registriert seit: 1. Aug 2007
Ort: Melsungen
155 Beiträge
 
Delphi 7 Professional
 
#3

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 19:42
sorry , aber ich meinte tserversocket und tclientsocket

Gruß Masteric
"Programmieren ist eine der universellsten, allübergreifendsten und höchsten von Menschen erreichten Formen der Kreativität."
Nur weil Gott die Welt in 6 Tagen erschaffen hat, heisst das nicht, dass Informatiker alles in 6 Tagen programmieren können.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 20:08
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.
  Mit Zitat antworten Zitat
Masteric

Registriert seit: 1. Aug 2007
Ort: Melsungen
155 Beiträge
 
Delphi 7 Professional
 
#5

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 20:23
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:
var s: TStream;
begin
Socket.ReceiveBuf(s, sizeof(s));
so? und dann den stream in ein timage laden um es anzuzeigen??

 Image1.Picture.Bitmap.LoadFromStream(s); hoffe mal, dass das so richtig ist....

Gruß Masteric
"Programmieren ist eine der universellsten, allübergreifendsten und höchsten von Menschen erreichten Formen der Kreativität."
Nur weil Gott die Welt in 6 Tagen erschaffen hat, heisst das nicht, dass Informatiker alles in 6 Tagen programmieren können.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 22:41
Warum probierst du es nicht einfach aus?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Masteric

Registriert seit: 1. Aug 2007
Ort: Melsungen
155 Beiträge
 
Delphi 7 Professional
 
#7

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 22:52
yo das hab ich ^^

und es geht nicht

also es kommt nichts an....

Ich weiss einfach nicht wie ich das Bild empfangen soll


Gruß Masteric
"Programmieren ist eine der universellsten, allübergreifendsten und höchsten von Menschen erreichten Formen der Kreativität."
Nur weil Gott die Welt in 6 Tagen erschaffen hat, heisst das nicht, dass Informatiker alles in 6 Tagen programmieren können.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Image über Socket verschicken

  Alt 28. Jan 2008, 22:56
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?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Image über Socket verschicken

  Alt 29. Jan 2008, 11:09
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:
var s: TStream;
begin
Socket.ReceiveBuf(s, sizeof(s));
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.

Zur Funktion ReceiveBuf() findet man im Forum genug Beispiele, z.B. hier. Dieses Beispiel hat nur noch das Problem, dass er nicht beachtet, dass das ClientSocket1Read() mehrfach aufgerufen werden kann, bis alle Daten empfangen wurden. Somit würde das Bild ungültig sein beim Laden - aber das kannst du ja schnell abändern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz