Entwickler-Ecke
Internet / Netzwerk - Image per Socket verschicken
Tingeltangel-Bob - Do 29.01.09 22:18
Titel: Image per Socket verschicken
Hallo zusammen,
Ich schreibe meine Facharbeit in Informatik über die Problematik Bilder in Delphi über Sockets zu verschicken. Und mittlerweile kann ich wirklich ein Lied davon singen was es da so an Problemen gibt. Mit viel Mühe und Not und einer Menge Hilfe habe ich es geschafft dieses Code gestückel hinzubekommen:
Server:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCreate(Sender: TObject); begin Stream:=TMemorystream.Create; end;
procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); var BufSize: Integer; s: String; begin Bufsize:=serversocket.Socket.receivelength; stream.size:=bufsize; serversocket.Socket.ReceiveBuf(stream,BufSize); ImBild.picture.bitmap.loadfromstream(stream); stream.free; end; |
Client:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.BtConnectClick(Sender: TObject); begin ClientSocket.host:=EdServerIP.Text; ClientSocket.Active:=true; LbStatus.Caption:='Connected'; end;
procedure TForm1.BtSendClick(Sender: TObject); var stream:TMemorystream; begin Stream:=TMemoryStream.Create; Impicture.Picture.Bitmap.SaveToStream(Stream); Stream.Position:=0; ClientSocket.Socket.SendBuf(Stream.Size, SizeOf(Stream.Size));clientsocket.socket.sendstream(Stream); end; |
Jedoch kann der Client nicht kompiliert werden.
Ich hoffe mir kann jemand weiterhelfen weil es auch zeitlich für mich langsam knapp wird. Hatte von der Thematik keine Ahnung und ich hätte nicht gedacht das das so kompliziert wird.
Narses - Do 29.01.09 22:39
Moin und :welcome: im Forum!
Sorry, aber dein Ansatz ist schon daneben, das wird so nicht klappen. Hier mal etwas Lektüre für dich: ;)
cu
Narses
Tingeltangel-Bob - Do 29.01.09 22:59
Danke, das sieht schonmal gut aus, werd mich da jetzt gleich einmal durcharbeiten. :-)
Narses - Do 29.01.09 23:02
Titel: Re: Image per Socket verschicken
Moin!
Ähm, was mir gerade so beim nochmal Drüberlesen auffällt: ich habe dir ja gar nicht gesagt,
warum der Ansatz daneben ist... :oops: aaalso: ;)
Tingeltangel-Bob hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); var BufSize: Integer; s: String; begin Bufsize:=serversocket.Socket.receivelength; stream.size:=bufsize; serversocket.Socket.ReceiveBuf(stream,BufSize); ImBild.picture.bitmap.loadfromstream(stream); stream.free; end; | |
Sieht man mal davon ab, dass du die Socket-Komponenten nicht korrekt ansprichst, dann kriegst du
hier nicht wie evtl. von dir erwartet die gesamte Streamlänge raus, sondern nur die Größe des gerade eingetroffenen Stücks (also max. 8kb, da der Stream in Teilstücken gesendet wird). :idea:
cu
Narses
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!