![]() |
Stream per TCP senden
Hallo,
habe gerade ein kleines Problem und finde den fehler nicht. Vielleicht habe ich ja irgendwas übersehen also der Stream wird gefüllt gesendet, aber beim Client kommt nicht wirklich etwas an. Ich speicher zum testen die Daten in eine Textdatei und das was ankommt ist leer.
Delphi-Quellcode:
procedure TForm5.IdTCPServer1Connect(AContext: TIdContext);
var Stream: TMemoryStream; pktype, pksubtype: integer; Data: string; Len: Longint; begin pktype:=22; pksubtype:=0; Data:='Test1123'; Stream:= TMemoryStream.Create; try Stream.Write(pktype, SizeOf(pktype)); Stream.Write(pksubtype, SizeOf(pksubtype)); Len := Length(Data); Stream.Write(Len, SizeOf(Len)); Stream.Write(PChar(Data)^, Len); AContext.Connection.IOHandler.Write(Stream); Stream.SaveToFile('C:\test.txt'); finally Stream.Free; end; end;
Delphi-Quellcode:
procedure TForm5.Timer1Timer(Sender: TObject);
var ReadStream: TMemoryStream; begin if IdTCPClient1.Connected then begin try ReadStream:= TMemoryStream.Create; try IdTCPClient1.IOHandler.ReadStream(ReadStream, -1, false); ReadStream.Position:=0; ReadStream.SaveToFile('C:\test2.txt'); Except //ShowError('Verbindung unterbrochen!'); end; finally ReadStream.Free; end; end else begin Timer1.Enabled:=false; ShowError('Verbindung unterbrochen!'); end; end; |
Re: Stream per TCP senden
Auf den ersten Blick würde ich sagen, dass du nach dem Schreiben in den Stream, diesen auch wieder auf den Anfang zurücksetzen musst:
Delphi-Quellcode:
{...}
Stream.Write(Len, SizeOf(Len)); Stream.Write(PChar(Data)^, Len); Stream.Seek(0,0); AContext.Connection.IOHandler.Write(Stream); |
Re: Stream per TCP senden
Nein bringt leider auch nichts
|
Re: Stream per TCP senden
Ich kenne jetzt die INDY Componenten nicht, aber hast du es mal damit versucht, die Streamgrösse mit anzugeben?:
Delphi-Quellcode:
Stream.Seek(0,0);
AContext.Connection.IOHandler.Write(Stream,Stream.Size); |
Re: Stream per TCP senden
Zitat:
Die -1 im ReadStream sagt ja: Lies als erstes die Streamgröße aus der Verbindung.
Delphi-Quellcode:
Also muss man die Größe mitschicken. Und das geht ganz elegant beim Write per AWriteByteCount = true
if (AByteCount = -1) and (not AReadUntilDisconnect) then begin
// Read size from connection if LargeStream then begin AByteCount := ReadInt64; end else begin AByteCount := ReadLongInt; end; end; Das sollte schon des Rätsels Lösung sein. |
Re: Stream per TCP senden
Ok alles klar hat funktioniert, hätte ich auch von alleine drauf kommen können :-D
Vielen dank erstmal für die schnelle hilfe, aber wofür ist der Code den du mit angehängt hast??? Das funktioniert ja mit der -1 |
Re: Stream per TCP senden
Zitat:
Delphi-Quellcode:
Stream.Write(PChar(Data)^, Len * SizeOf(Char));
|
Re: Stream per TCP senden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 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