Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Bild senden mit Sockets Fehler (https://www.delphipraxis.net/130732-bild-senden-mit-sockets-fehler.html)

luckys41 12. Mär 2009 09:55


Bild senden mit Sockets Fehler
 
Guten Tag,

Ich möchte gerne ein Bild über die Sockets versenden.

Hier vorerst mein Code

Client :
Delphi-Quellcode:
procedure TForm4.Timer1Timer(Sender: TObject);
var
 BufSize: Integer;
  s: String;
begin
Stream:=TMemorystream.Create;
Bufsize:=form1.serversocket1.socket.receivelength;
stream.size:=bufsize;
form1.serversocket1.Socket.ReceiveBuf(stream,BufSize);
Image1.picture.bitmap.loadfromstream(stream);
stream.free;
end;
Server :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 stream:TMemorystream;
ssize:integer;
  Image1 : TImage;
  Dc : HDC;
  Jpeg : TJPEGImage;
begin
dc := GetDc(GetDesktopWindow);
  Image1 := Timage.Create(self);
  Image1.Width := GetDeviceCaps(dc,HORZRES);
  Image1.Height := GetDeviceCaps(dc,VERTRES);
  BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY);
  Image1.Canvas.Brush.Style := bsClear;
  Image1.Canvas.Font.Color := clred;
  jpeg := TJPEGImage.Create;
  jpeg.Assign(Image1.Picture.Bitmap);
Stream:=TMemoryStream.Create;
ssize:=stream.size;
Image1.Picture.Bitmap.SaveToStream(Stream);
Stream.Position:=0;
ClientSocket1.Socket.SendBuf(ssize, SizeOf(ssize));
clientsocket1.socket.sendstream(Stream);
  ReleaseDc(GetDesktopWindow,dc);
  Image1.Free;
  jpeg.Free;
Dabei kommt immer der Fehler :

---------------------------
Client
---------------------------
Windows socket error: Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde (10057), on API 'recv'
---------------------------
OK
---------------------------

Client und Server sind verbunden und alles...
Deshalb verstehe ich den Fehler nicht.

Was hab ich falsch gemacht ??

Mit freundlichen Grüßen,
Luckys41

Klaus01 12. Mär 2009 11:04

Re: Bild senden Fehler
 
Hallo,

wieso fragst Du den Buffer im Server per Timer ab.
Hat der nicht ein Ereignis welches ausgelöst wird wenn
Daten beim Server ankommen?

Grüße
Klaus

luckys41 12. Mär 2009 11:36

Re: Bild senden Fehler
 
Dankeschön, daran habe ich überhaupt noch nicht gedacht aber, Serversocket1.clientwrite gibt schon eine Nachricht aus wenn mann sich verbindet mit dem Client :|

luckys41 12. Mär 2009 14:25

Re: Bild senden Fehler
 
So hab es mal ein bisschen verändert und es kommt der gleiche Fehler immer noch :

Client :
Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
begin
Stream:=TMemorystream.Create;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var BufSize: Integer;
  s: String;
begin
Bufsize:=serversocket1.Socket.receivelength;
stream.size:=bufsize;
serversocket1.Socket.ReceiveBuf(stream,BufSize);
form4.image1.picture.bitmap.loadfromstream(stream);
stream.free;
end;
Server :
Delphi-Quellcode:
dc := GetDc(GetDesktopWindow);
  Image1 := Timage.Create(self);
  Image1.Width := GetDeviceCaps(dc,HORZRES);
  Image1.Height := GetDeviceCaps(dc,VERTRES);
  BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,dc,0,0,SRCCOPY);
  Image1.Canvas.Brush.Style := bsClear;
  Image1.Canvas.Font.Color := clred;
  jpeg := TJPEGImage.Create;
  jpeg.Assign(Image1.Picture.Bitmap);
Stream:=TMemoryStream.Create;
ssize:=stream.size;
Image1.Picture.Bitmap.SaveToStream(Stream);
Stream.Position:=0;
ClientSocket1.Socket.SendBuf(ssize, SizeOf(ssize));
clientsocket1.socket.sendstream(Stream);
  ReleaseDc(GetDesktopWindow,dc);
  Image1.Free;
  jpeg.Free;
  end;

nuclearping 12. Mär 2009 14:48

Re: Bild senden mit Sockets Fehler
 
Oben war Server und Client noch umgedreht. ;)

Auch würde ich im Server Event den übergebenen Socket verwenden, statt serversocket1.Socket.

Auch 'ne ordentliche Code-Einrückung und ein sauberer Stil wären ganz hilfreich. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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