AGB  ·  Datenschutz  ·  Impressum  







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

Stream mit Indy versenden

Ein Thema von Spurius · begonnen am 2. Mär 2004 · letzter Beitrag vom 6. Mär 2004
Antwort Antwort
Seite 1 von 2  1 2      
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#1

Stream mit Indy versenden

  Alt 2. Mär 2004, 17:10
Hallo,
ich versuche mit folgendem Code einen Stream mit Indy zu versenden:
Delphi-Quellcode:
Sourcecode:
procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var Big: Integer;
    RecInfos: TMemoryStream;
    Test: Integer;
begin
 Big := Athread.Connection.ReadInteger; // Größe von Car.Munition
 RecInfos := TMemoryStream.Create;
 Athread.Connection.ReadStream(RecInfos, Big); //Hier soll der Stream gelesen werden
 Test := RecInfos.Read(Car.Munition, Big);
 Menup.Caption := IntToStr(Test);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
Var Infos: TMemoryStream;
begin
 Infos := TMemoryStream.Create;
 Infos.WriteBuffer(Car.Munition, SizeOf(Car.Munition)); //Car.Munition ist ein Integerwert
 Client.WriteInteger(SizeOf(Car.Munition)); //Hier soll die Größe des Streams an den Server übermittelt
 Client.WriteStream(Infos,true,True,0); //werden
end;
Leider ist die Menup.Caption 0. Ich kenn mich mit Streams nicht wirklcih aus, deshalb kann es sein, dass ich mit dem Stream was falsch mache.
Gruß
Spurius
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Stream mit Indy versenden

  Alt 2. Mär 2004, 17:25
Delphi-Quellcode:
procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var Big: Integer;
    RecInfos: TMemoryStream;
    Test: Integer;
begin
Big := Athread.Connection.ReadInteger;
RecInfos := TMemoryStream.Create;
Athread.Connection.ReadStream(RecInfos, Big);
RecInfos.Position:=0;
Test := RecInfos.Read(Car.Munition, Big); //Wenn ich das richtig sehe, willst du die Anzahl der gelesenen
Menup.Caption := IntToStr(Test); // Bytes ausgeben?
end;
Bob
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#3

Re: Stream mit Indy versenden

  Alt 2. Mär 2004, 19:02
Hallo,
ich will eigentlich den Wert von Car.Munition lesen. Nicht die Größe davon.
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Stream mit Indy versenden

  Alt 3. Mär 2004, 22:15
probier das mal:
Delphi-Quellcode:
procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var Big: Integer;
    RecInfos: TMemoryStream;
    Test: Integer;
begin
Big := Athread.Connection.ReadInteger;
RecInfos := TMemoryStream.Create;
Athread.Connection.ReadStream(RecInfos, Big);
RecInfos.Position:=0;
RecInfos.Read(Test,Sizeof(Test));
RecInfos.Read(Test,RecInfos.Size); //eins von beiden müsste gehen
Menup.Caption := IntToStr(Test);
end;
Bob
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Stream mit Indy versenden

  Alt 4. Mär 2004, 09:49
Hi,

wichtig ist vielleicht auch, das es nicht notwendig ist die größe des kommenden Streams vorweg zu schicken.
ReadStream und WriteStream haben entsprechende Parameter, die zum um das Senden der Streamgrösse selber kümmern.


Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Stream mit Indy versenden

  Alt 4. Mär 2004, 10:38
Hallo,
und erzeugte TMemoryStreams müssen am Ende auch wieder freigegeben werden.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#7

Re: Stream mit Indy versenden

  Alt 4. Mär 2004, 15:35
Hallo,
ich bekomm jetzt 67108864, Car.Munition ist aber 10. Hier der Code:
Delphi-Quellcode:
procedure TForm1.ServerExecute(AThread: TIdPeerThread);
var Big: Integer;
    RecInfos: TMemoryStream;
    Test: Integer;
begin
Big := Athread.Connection.ReadInteger;
RecInfos := TMemoryStream.Create;
Athread.Connection.ReadStream(RecInfos, Big);
RecInfos.Position:=0;
RecInfos.Read(test, sizeof(test));
Menup.Caption := IntToStr(Test);
recinfos.Free;
end;


procedure TForm1.Timer2Timer(Sender: TObject);
Var Infos: TMemoryStream;
begin
 Infos := TMemoryStream.Create;
 Infos.WriteBuffer(Car.Munition, SizeOf(Car.Munition));
 Client.WriteInteger(SizeOf(Car.Munition));
 Client.WriteStream(Infos,true,True,0);
 infos.Free;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Stream mit Indy versenden

  Alt 4. Mär 2004, 16:49
Hi,

irgentwie finde ich das absolut schwachsinnig was Du da gerade versuchst.

Entweder Du willst nur einen Zahlenwert verschicken, dann arbeitest Du mit WriteInteger bzw. ReadInteger(gibts auch für SmallInt und Cardinal) oder Du verschickst wirklich ein Objekt in einem Buffer(z.B. eine DAtei).

Wenn Du nur eine Zahl verschicken willst :

Code:
//Server :
Var iMunition : Longint;
begin
  iMunition := AThread.Connection.ReadInteger;
end;

//Client
Client.WriteInteger(Car.Munition);
// Wenn Du ein Objekt oder einen Stream verschicken willst :

Code:
//Server :
Var ms : TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    try
      AThread.Connection.ReadStream(ms);
    except
      ms.clear;
    end;
    if ms.Size > 0 then
      ms.SavetoFile('C:\TransferedFile.txt');
  finally
    ms.free; // Speicher wieder freigeben
  end;
end;


//Client :
Var ms : TMemoryStream;
begin
  ms := TMemoryStream.Create;
  try
    // Memory-Stream mit den Daten füllen die verschickt werden sollen, hier als Bsp. eine Datei
    ms.loadFromFile('c:\Autoexec.bat');
    ms.Position := 0; // Zur Sicherheit auf Anfang setzen
    Client.openwriteBuffer;
    Client.writeStream(ms);
    Client.CloseWriteBuffer;
  finally
    ms.free; // Speicher wieder freigeben
  end;
end;
Ich hoffe ich konnte damit, einige Fragen kären,

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#9

Re: Stream mit Indy versenden

  Alt 4. Mär 2004, 17:14
Hallo,
ich wollt erstmal das Prinzip mit dem stream klären, bevor ich weitere Daten versende.
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Stream mit Indy versenden

  Alt 4. Mär 2004, 18:50
Hi,

versuch mal statt
RecInfos.Read(test, sizeof(test)); lieber
RecInfos.Read(Test,RecInfos.Size);
Bob
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:23 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