AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Stream per TCP senden
Thema durchsuchen
Ansicht
Themen-Optionen

Stream per TCP senden

Ein Thema von XXcD · begonnen am 23. Apr 2010 · letzter Beitrag vom 23. Apr 2010
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

Stream per TCP senden

  Alt 23. Apr 2010, 15:34
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;
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Stream per TCP senden

  Alt 23. Apr 2010, 15:39
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);
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Stream per TCP senden

  Alt 23. Apr 2010, 15:54
Nein bringt leider auch nichts
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

Re: Stream per TCP senden

  Alt 23. Apr 2010, 16:39
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);
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Stream per TCP senden

  Alt 23. Apr 2010, 18:13
Zitat von blackfin:
aber hast du es mal damit versucht, die Streamgrösse mit anzugeben?
Recht hat er.
Die -1 im ReadStream sagt ja: Lies als erstes die Streamgröße aus der Verbindung.
Delphi-Quellcode:
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;
Also muss man die Größe mitschicken. Und das geht ganz elegant beim Write per AWriteByteCount = true
Das sollte schon des Rätsels Lösung sein.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Stream per TCP senden

  Alt 23. Apr 2010, 21:29
Ok alles klar hat funktioniert, hätte ich auch von alleine drauf kommen können
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#7

Re: Stream per TCP senden

  Alt 23. Apr 2010, 21:40
Zitat:
Stream.Write(PChar(Data)^, Len);
PS: Delphi 2009 ist Unicode.

Stream.Write(PChar(Data)^, Len * SizeOf(Char));
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Stream per TCP senden

  Alt 23. Apr 2010, 22:15
Zitat von XXcD:
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
Weiß ich nicht mehr ... mir war so danach.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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