Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Screenshot verschicken (https://www.delphipraxis.net/150260-screenshot-verschicken.html)

Penguin 11. Apr 2010 19:32


Screenshot verschicken
 
Also ich habe das Problem, das wenn ich einen Screenshot gemacht habe und diesen zu meinem Client schicke kann ich diesen nicht einbinden.
Da ich mit dem verschicken ein paar probleme hatte ist der code teilweise aus nen Beispiel genommen was ich im netz gefunden habe.

Delphi-Quellcode:
procedure Tfm_main.cs_BinaryRead(Sender: TObject; Socket: TCustomWinSocket);
var
  s, sl: string;
begin
  s:= Socket.ReceiveText;
  // If we're not in recieve mode:
  if not Reciving then
  begin
    // Now we need to get the length of the data stream.
    SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator
    StrLCopy(@sl[1], PChar(s), Length(sl)-1);
    DataSize:= StrToInt(sl);
    Data:= TMemoryStream.Create;
    // Delete the size information from the data.
    Delete(s, 1, Length(sl));
    Reciving:= true;
  end;
  // Store the data to the file, until we've received all the data.
  try
    Data.Write(s[1], length(s));
    if Data.Size = DataSize then
    begin
      Data.Position:= 0;
      fm_image.Visible := True;
      fm_image.img_screen.Picture.Bitmap.LoadFromStream(Data);
      Data.Free;
      Reciving:= false;
      Socket.Close;
    end;
  except
    Data.Free;
  end;
end;

Die datei kommt komplett an aber wenn ich den Stream in die Bitmap laden will kommt der Fehler:

Im Projekt Client.exe ist eine Exception der Klasse EInvalidGraphic mit derm Meldung 'Bitmap ist ungültig' aufgetreten.
Ich hoffe mir kann einer helfen.




MFG
Penguin

omata 11. Apr 2010 20:15

Re: Screenshot verschicken
 
So wie ich das sehe, verwendest du ReceiveText für denen Datenstrom, da wirst du Schwierigkeiten mit dem Zeichen 0 erhalten. Benutze vollständig einen Stream für binäre Daten.

Penguin 11. Apr 2010 20:57

Re: Screenshot verschicken
 
mhh es gibt aber kein Socket.recievestream kannst du vllt etwas genauer werden ??

mfg
Penguin

mkinzler 11. Apr 2010 21:06

Re: Screenshot verschicken
 
Aber .ReceiveBuf()

omata 11. Apr 2010 23:08

Re: Screenshot verschicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Beispiel...

Penguin 12. Apr 2010 10:06

Re: Screenshot verschicken
 
thx für das project nur leider bekommt bei mir der client keine Datei vom Server.Das klappt also auch nicht.

MFG
Penguin

Hobby-Programmierer 12. Apr 2010 12:00

Re: Screenshot verschicken
 
Also bei mir funktioniert der Code von Omata!
@Penguin, hast du Server und Client auf dem gleichen Rechner gestartet?

Penguin 12. Apr 2010 12:28

Re: Screenshot verschicken
 
jo läuft mit localhost(also 127.0.0.1).Ich bekommte auch die Status meldung das beide connected sind.

Hobby-Programmierer 12. Apr 2010 13:00

Re: Screenshot verschicken
 
Unter welchem OS und mit welchen Rechten hast du denn getestet? Versuche mal eine andere Datei zu verschieben.

SirThornberry 12. Apr 2010 14:07

Re: Screenshot verschicken
 
Ich hab mir nur den Client von Omata angeschaut und soweit ich das überblickt habe macht dieser (wie so viele andere) einen entscheidenten Fehler. Es wird davon ausgegangen das im OnClientRead etc. die Buffer genau so ankommen wie sie abgeschickt werden. Tatsächlich ist es aber so das 2 kurz hintereinander geschickte Buffer in einem Ereignis auf der anderen Seite ankommen können. Ebenso kann es passieren das große Daten in mehreren Stücken nacheinander ankommen, das Ereignis also mehrfach aufgerufen wird.

[Edit]Gleichen Fehler scheint auch Penguin zu machen.[/Edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr.
Seite 1 von 2  1 2      

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