![]() |
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:
Ich hoffe, ihr könnt mir helfen.
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; Das Senden und Empfangen von einzelnen Strings via "SendText" funtkioniert wurnderbar. |
AW: ServerSocket & ClientSocket Stream
Tipp: mit Internet Direct (Indy) ist das Senden von Streams über TCP wesentlich einfacher als mit den ("deprecated") TClient/TServerSockets.
|
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. |
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:
|
AW: ServerSocket & ClientSocket Stream
Vielleicht hilft dieses
![]() |
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 ? |
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 22:18 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