Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TCP Indy 10 SendReceiveRecords (https://www.delphipraxis.net/162363-tcp-indy-10-sendreceiverecords.html)

zohan1 19. Aug 2011 06:06

TCP Indy 10 SendReceiveRecords
 
kann mir einer erklären wie das auf indy 10 geht hab schon die demos funktionieren aber leider nur auf indy 9 und da 10 kein so ein demo hat würd ich mich freuen wenns mir einer erklärt :)(Delphi 2006)

mfg
zohan1

EDIT// Mien record einthält strings sowie integer und CRC zur kontrolle hätte mir gedacht ich schrieb alles in ein Stream aber wie mach ich das btw wie transformier ich dann den stream in ein record zurück :S

chaosben 19. Aug 2011 06:20

AW: TCP Indy 10 SendReceiveRecords
 
Zum serialisieren sind die Klassen Delphi-Referenz durchsuchenTStreamReader und Delphi-Referenz durchsuchenTStreamWriter ganz praktisch

zohan1 22. Aug 2011 06:06

AW: TCP Indy 10 SendReceiveRecords
 
hat da einer ein bespiel? wäre ganz nützlich denn ich konnte mich mit theorie alleine nicht einen richtigen lösungsweg machen :S

chaosben 22. Aug 2011 06:18

AW: TCP Indy 10 SendReceiveRecords
 
Auf der schreibenden Seite erzeugst du einen TWriter und schreibst seriell die Felder deines Records rein.
Delphi-Quellcode:
var
  w : TWriter;
  ms : TMemoryStream;
begin
  ms := TMemoryStream.Create;
  w := TWriter.Create(ms, 1000);
  w.WriteInteger(MeinRecord.IntField);
  w.WriteString(MeinRecord.StringField);
  w.Free;
  Indy.WriteStream(ms);
  ms.Free;
end
Und auf der anderen Seite das gleiche Spiel mit TReader.

zohan1 22. Aug 2011 12:21

AW: TCP Indy 10 SendReceiveRecords
 
also irgenwas mach ich falsch beim lesen

Code:
  Size := StrToInt(ReceiveCommand(AContext));
        AContext.Connection.IOHandler.ReadStream(ms, Size, False);
        ms := TMemoryStream.Create;
        w := TReader.Create(ms, 1000);
        Rec.Acknowledge:= w.readInteger;
        Rec.FilePath:=w.readString;
        Rec.Command:=w.readString;
        w.Free;
        ms.Free;
Fehler:= Zugriffsverletzung der Server.exe :(

kann mir einer helfen?

DeddyH 22. Aug 2011 12:25

AW: TCP Indy 10 SendReceiveRecords
 
Zitat:

Delphi-Quellcode:
AContext.Connection.IOHandler.ReadStream(ms, Size, False);
ms := TMemoryStream.Create;

Du willst etwas befüllen, was Du anschließend überhaupt erst erzeugst?

zohan1 23. Aug 2011 08:21

AW: TCP Indy 10 SendReceiveRecords
 
ups xD blöder fehler aber jez hab ich ein Stream-Lesefehler :( (sry aber mit Streams arbeite ich jez das erste mal :()

chaosben 23. Aug 2011 08:39

AW: TCP Indy 10 SendReceiveRecords
 
Wahrscheinlich hast du den Stream noch nicht "zurückgespult".
Delphi-Quellcode:
Stream.Seek(0, soFromBeginning)
So einen Stream musst du dir wie eine Videokassette vorstellen. Wenn er beschrieben/gelesen wird, ändert sich die Position des Bandes/die Postition-Property.
So auch in deinem Fall. Du liest die Daten aus der Verbindung in den Stream. Dadurch steht die Position am Ende.
Code:
[01010101010101]
              ^
Wenn du dann dem Stream sagst: Lies mal bitte (z.B.) 4 Byte, gibts nen Fehler, weil ab der aktuellen Position keine 4 Byte verfügbar sind.

zohan1 24. Aug 2011 07:08

AW: TCP Indy 10 SendReceiveRecords
 
danke hat funktioniert :)


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