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));//Fehler:"Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden"
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


Xentar - Do 29.01.09 22:52

http://forum.delphi-treff.de/showthread.php?t=25742


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: ;)
user profile iconTingeltangel-Bob hat folgendes geschrieben Zum zitierten Posting springen:

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