Entwickler-Ecke
Internet / Netzwerk - screenshot über sockets senden als stream
Maniacmd - Fr 11.09.09 20:32
Titel: screenshot über sockets senden als stream
hi,
ich habe mir im forum paar beiträge zum dateiversand über sockets durchgelesen und habe einen code geschrieben der von einem programm (bei mir der server) zu einem anderen (client) einen screenshot senden soll. der screenshot wird aber bei dem programm wo er hin gesendet wird nicht angezeigt.
das ist das program das den screenshot sendet
Delphi-Quelltext
1: 2: 3: 4: 5:
| takescreenshot;
streambild:=tmemorystream.create; image1.Picture.Bitmap.SaveToStream(streambild); socket.SendStream(streambild); |
und das der empfänger
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var streambild:tmemorystream; bufferl:integer; zeiger:pointer; begin Log.Lines.Add(Socket.ReceiveText);
streambild:=tmemorystream.Create; bufferl:=socket.ReceiveLength; getmem(zeiger,bufferl); socket.ReceiveBuf(zeiger^,bufferl); streambild.Write(zeiger^,bufferl); image1.Picture.Bitmap.LoadFromStream(streambild);
end; |
vielleicht wisst ihr wo das problem liegt
mfg
Xentar - Fr 11.09.09 20:36
Das orange tut ja in den Augen weh.. schau dir mal bitte an, wie man mit Delphi TAGs umgeht.
Zum Problem:
Du musst den Stream nach dem Beschreiben "zurückspulen".
Maniacmd - Fr 11.09.09 20:48
wenn ich das "zurückspulen" dazuschreibe empfängt der client zwar irgendwas aber es scheint kein bild zu sein. das image bleibt leer, aber im log werden irgendwelche schriftzeichen ausgegeben. wenn ich die funktion log.lines.add weg lasse passiert einfach nichts
danke soweit erstma mfg
Xentar - Fr 11.09.09 21:12
Im Server musst du das natürlich auch machen, vor dem Versenden.
Maniacmd - Sa 12.09.09 17:29
alles klar ich habe jetzt die beiden zeilen einmal im server und im client eingefügt.
jetzt bekomme ich die fehlermeldung:
Bitmap image is not valid
in der image komponente wird ein schwarzes bild angezeigt
Xentar - Sa 12.09.09 18:36
Hmpf
speicher das doch erstmal testweise in einer Datei, und vergleich mal die Größen und sowas.
Außerdem:
Besser wäre es, wenn du vor dem eigentlichen Bild die Größe als Integer (bzw. int64) überträgst. Dann kann der Empfänger so lange warten, bis er wirklich alle Daten erhalten hat.
Maniacmd - Sa 12.09.09 19:04
das bild was ankommt ist 54kb groß und kann nicht angezeigt werden. die screenshot funktion wird aber richtig ausgeführt und beim sendenden programm richtig angezeigt also muss ja irgendwas beim senden schief gehn.
jaenicke - So 13.09.09 09:37
Dann schau dir eben einmal die ankommenden Daten an und vergleiche mit dem Original. Damit du weißt was da falsch ankommt, was also ggf. fehlt usw.
Aber
Xentar hat ja auch schon die Größenangabe erwähnt, das reicht vermutlich schon. Der Rest wird vermutlich einfach nicht mitgespeichert.
Maniacmd - So 13.09.09 12:49
ok danke jetzt gehts
Sithlord - Mi 21.10.09 13:46
Huhu,
sitze am gleichen Problem, kannst du mir mal bitte die Lösung dafür posten?
Würde sicherlich auch andere Interessieren!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!