![]() |
Bild senden mit Sockets Fehler
Guten Tag,
Ich möchte gerne ein Bild über die Sockets versenden. Hier vorerst mein Code Client :
Delphi-Quellcode:
Server :
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;
Delphi-Quellcode:
Dabei kommt immer der Fehler :
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; --------------------------- 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 |
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 |
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 :|
|
Re: Bild senden Fehler
So hab es mal ein bisschen verändert und es kommt der gleiche Fehler immer noch :
Client :
Delphi-Quellcode:
Server :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;
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; |
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 08:40 Uhr. |
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