Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ServerSocket & ClientSocket Stream (https://www.delphipraxis.net/180690-serversocket-clientsocket-stream.html)

SyntaxXx 9. Jun 2014 15:35

ServerSocket & ClientSocket Stream
 
Guten Tag zusammen,
ich bin gerade dabei eine Server, Client - Anwendung zu schreiben.
Dazu benutze ich die Komponenten ServerSocket und ClientSocket.

Nun möchte ich eigentlich gerne ein Record bzw. alternativ ein Array of String versenden.
Und zwar vom Server zum Client.

Dazu benutze ich folgenden Code im ServerSocket:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var paramRec: TParamRec;
    ms: TMemoryStream;
    ar: Array [0..4] of String;
begin
  ms := TMemoryStream.Create;
  paramRec.param1 := 'Hello';
  paramRec.param2 := 'World';
  ms.Write(paramRec, SizeOf(paramRec));
  ms.Position := 0;
  ServerSocket1.Socket.Connections[0].SendStream(ms);
end;

Das Problem ist, dass ich nicht weiß, wie ich dem Stream im ClientSocket abfange.
Ich hab es jetzt mal so vesucht, aber bekomme ich da nichts gescheites bei raus, bzw. weiß nicht, wie ich den Stream wieder zu nem Record bekomme.
Alternativ wenns einfacher geht, würde auch ein Array of String gehen.

Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var paramRec: TParamRec;
    ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.Position := 0;

  Socket.ReceiveBuf(ms, Socket.ReceiveLength);
end;
Ich hoffe, ihr könnt mir helfen.
Das Senden und Empfangen von einzelnen Strings via "SendText" funtkioniert wurnderbar.

mjustin 10. Jun 2014 07:19

AW: ServerSocket & ClientSocket Stream
 
Tipp: mit Internet Direct (Indy) ist das Senden von Streams über TCP wesentlich einfacher als mit den ("deprecated") TClient/TServerSockets.

SyntaxXx 10. Jun 2014 17:24

AW: ServerSocket & ClientSocket Stream
 
Meinst du damit die IdTCPServer & IdTCPClient Komponente?
Wenn ja, mit denen habe ich es schon versucht.

Es stimmt, streams lassen sich damit einfach versenden, aber für den Rest sind sie meiner Meinung nach schlechter.
Eine Nachricht von Client zum Server geht, aber vom Server eine Antwort zu einem bestimmten Client finde ich sehr schwer bis überhaupt nicht möglich.

Zudem hat der Server zwar eine Execute Methode, aber der Client nicht.
Da muss man entweder mit nem Timer arbeiten, oder mühsam einen extra Thread dafür erstellen.

Bei den Sockets gibt es da auf beiden Seite die OnRead Methode und das versenden in beide Richtungen ist auch ganz einfach. Nur mit Streams ist das so eine Sache.

Desmulator 10. Jun 2014 20:41

AW: ServerSocket & ClientSocket Stream
 
Ich möchte an dieser Stelle darauf hinweisen, dass du auch die Strings im Rekord einzellnt senden musst, da sonst nur die (nutzlosen) Adressen übertragen werden, aber das ist dir natürlich klar und da
Zitat:

Das Senden und Empfangen von einzelnen Strings via "SendText" funtkioniert wurnderbar.
sollte das auch kein Problem für dich darstellen. :)

Jumpy 11. Jun 2014 07:47

AW: ServerSocket & ClientSocket Stream
 
Vielleicht hilft dieses Tutorial von Narses?

SyntaxXx 11. Jun 2014 16:21

AW: ServerSocket & ClientSocket Stream
 
Ok, da hast du recht.
Records kann ich ganz einfach senden :)

Nun möchte ich aber auch gerne noch ein Bild (Bitmap) versenden.
Habt ihr dafür gerade eine Lösung parat ?

newbe 12. Jun 2014 06:14

AW: ServerSocket & ClientSocket Stream
 
ja du könntest das bitmapfile base64 encodieren und einfach als string übertragen. Im Prinzip kannste damit alles in einem TStringStream übertragen.

mfg newbe


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