AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Stream mit Indys versenden
Thema durchsuchen
Ansicht
Themen-Optionen

Stream mit Indys versenden

Ein Thema von jfheins · begonnen am 16. Dez 2004 · letzter Beitrag vom 20. Dez 2004
 
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

Stream mit Indys versenden

  Alt 16. Dez 2004, 22:09
Ich habe schon viel versucht, aber ich komme einfach nicht weiter ...

Wie kann ich mit TIdTCPServer und TIdTCPClient einen Stream korrekt versenden ???

Mein letzter Versuch:
Delphi-Quellcode:
procedure showstream (Stream: TStream);
var
 MsgRecord: TMsgRecord;
begin
 Stream.Position := 0;
 FillMsgRecordFromStream (Stream, Msgrecord);
 form1.Memo1.Text := form1.Memo1.Text + 'Command: ' + inttostr(ord(MsgRecord.Command)) + #13#10 + 'SendBy: ' + MsgRecord.SendBy + #13#10 + 'Message:' + #13#10 + MsgRecord.Msg + #13#10#13#10;
 Stream.Position := 0;
end;
Delphi-Quellcode:
procedure FillMsgRecordFromStream (Stream: TStream; var MsgRecord: TMsgRecord);
var
 Len: LongInt;
begin
  Stream.Read (MsgRecord.Command, SizeOf (MsgRecord.Command));
  Stream.Read (MsgRecord.SendBy, SizeOf (MsgRecord.SendBy));
  Stream.Read (MsgRecord.FontColor, SizeOf (MsgRecord.FontColor));

  Stream.Read (Len, SizeOf (Len));
  SetLength (MsgRecord.FontName, Len);
  Stream.Read (PChar (MsgRecord.FontName)^, Len);

  Stream.Read (MsgRecord.FontSize, SizeOf (MsgRecord.FontSize));
  Stream.Read (MsgRecord.FontStyle, SizeOf (MsgRecord.FontStyle));

  Stream.Read (Len, SizeOf (Len));
  SetLength (MsgRecord.Msg, Len);
  Stream.Read (PChar (MsgRecord.Msg)^, Len);
end;
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
 Stream2: TStream;
begin
 Stream2 := TStringStream.Create;
 Memo1.Lines.Add('Reading ...');
try
 stream2.Position := 0;
 AThread.Connection.ReadStream(Stream2);
 Memo1.Lines.Add('Done. Processing ...');
except
 Memo1.Lines.Add('Failed. Processing ...');
end;
 showstream (stream2);
 Memo1.Lines.Add('Done.');
 Stream2.Free;
end;
Zum versenden:
Delphi-Quellcode:
procedure TForm1.Button8Click(Sender: TObject);
var
 MsgRecord: TMsgRecord;
 Stream2: tStream;
begin
  MsgRecord.Command := TXT;
  MsgRecord.SendBy := 'Julius';

  MsgRecord.FontColor := FontDialog1.Font.Color;
  MsgRecord.FontName := FontDialog1.Font.Name;
  MsgRecord.FontSize := FontDialog1.Font.Size;
  MsgRecord.FontStyle := FontDialog1.Font.Style;

  MsgRecord.Msg := Edit1.Text;

  stream2 := TStringStream.Create;

  fillstreamfrommsgrecord (Msgrecord, stream2);

  Stream2.Position := 0;

  IDTCPClient1.WriteStream (stream2, TRUE, TRUE, 0);

  stream2.Position := 0;

  showstream (stream2);

  stream2.Free;
end;
Mit
Delphi-Quellcode:
procedure FillStreamFromMsgRecord (MsgRecord: TMsgRecord; var Stream: TStream);
var
 Len: LongInt;
begin
  Stream.Write (MsgRecord.Command, SizeOf (MsgRecord.Command));
  Stream.Write (MsgRecord.SendBy, SizeOf (MsgRecord.SendBy));
  Stream.Write (MsgRecord.FontColor, SizeOf (MsgRecord.FontColor));

  Len := Length (MsgRecord.FontName);
  Stream.Write(Len, SizeOf (Len));
  Stream.Write (PChar (MsgRecord.FontName)^, Len);

  Stream.Write (MsgRecord.FontSize, SizeOf (MsgRecord.FontSize));
  Stream.Write (MsgRecord.FontStyle, SizeOf (MsgRecord.FontStyle));

  Len := Length (MsgRecord.Msg);
  Stream.Write(Len, SizeOf (Len));
  Stream.Write (PChar (MsgRecord.Msg)^, Len);
end;
Er verhält sich äuserst merkwürdig:
Beim connect vom Client wird beim Server OnExecute ausgelöst, si bleibt bei dem ReadStream einfach stehen (hört auf. Reagiert noch, alles danach wird nicht mehr beachtet.)
Beim Senden von Daten wird das vorherige Ereignis abgearbeitet (wiedereinstieg nach readstream mit korrekten daten) und das jetzt eingetretene bleibt wiederum bei readstream stehen.

Es wäre toll, wenn mir jemand ein Beispiel posten könnte,
in dem konkret ein vorhandener Stream mit den Indy-TCPs versendet wird.
  Mit Zitat antworten Zitat
 


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 02:10 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