AGB  ·  Datenschutz  ·  Impressum  







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

Stream über idhttp versenden?

Ein Thema von Chris1986 · begonnen am 18. Apr 2004 · letzter Beitrag vom 18. Apr 2004
Antwort Antwort
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#1

Stream über idhttp versenden?

  Alt 18. Apr 2004, 14:59
Hi,
ich versuche einen Stream mit Hilfe der idhttp-Komponenten zu versenden. Das Verbinden klappt problemlos, aber das Versenden des Streams macht Probleme. Der Client versendet zwar den Stream, aber beim Server kommt nichts an

Hier der Quelltext des Clients:
Delphi-Quellcode:
procedure TClient.btconnectClick(Sender: TObject);
begin
  with httpClient do
  begin
    disconnect;
    host := lbedHost.Text;
  memStatus.Lines.Add('verbinde mit '+httpClient.Host); //memStatus = TMemo
    connect(5000);
    if not connected
      then begin
             memStatus.Lines.Add('Verbindung zu '+httpClient.Host+' ist fehlgeschlagen');
             exit;
           end;
  end;
  memStatus.Lines.Add('verbunden mit '+httpClient.Host);
end;

procedure TClient.btsendClick(Sender: TObject);
var Stream: TMemoryStream;
begin
  memStatus.Clear;
  memStatus.Lines.Add('Öffne Opendialog . . .');
  if not Opendialog.Execute
    then begin
           memStatus.Lines.Add('. . . abgebrochen.');
           exit;
         end
    else memStatus.Lines.Add('. . . Datei "'+extractfilename(Opendialog.FileName)+'" zum senden ausgewählt.');
  Stream := TMemoryStream.Create;
  memStatus.Lines.Add('TMemoryStream erzeugt');
  Stream.LoadFromFile(Opendialog.FileName);
  Stream.Position := 0;
  memStatus.Lines.Add('Datei erfolgreich in Stream geladen');
  with httpClient do
  begin
    OpenWriteBuffer;
  memStatus.Lines.Add('versende Stream');
    WriteStream(Stream);
  memStatus.Lines.Add('Stream versendet');
    CloseWriteBuffer;
  end;
  Stream.Free;
end;
Und der Code des Servers:
Delphi-Quellcode:
procedure TServer.btactivateClick(Sender: TObject);
begin
  with httpServer do
  begin
    active := false;
    DefaultPort := strtoint(lbedPort.Text);//lbedPort = TLabeledEdit
    active := true;
  end;
end;

procedure TServer.httpServerExecute(AThread: TIdPeerThread);
var Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  memStatus.Lines.Add('TMemoryStream erzeugt');
  Stream.Clear;
  memStatus.Lines.Add('Stream zurückgesetzt');
  memStatus.Lines.Add('Empfange Stream . . . ');
  AThread.Connection.ReadStream(Stream);
  memStatus.Lines.Add('Stream erfolgreich empfangen');
  memStatus.Lines.Add('öffne Savedialog . . .');
  if not Savedialog.Execute
    then begin
           memStatus.Lines.Add('. . . abgebrochen.');
           Stream.free;
           memStatus.Lines.Add('Stream freigegeben');
           exit;
         end;
 memStatus.Lines.Add('Stream abgespeichert unter: '+Savedialog.FileName);
end;
Ich weiß nicht wodran es liegt. Vielleicht wird Onexecute im Server nicht richtig ausgeführt. Steht allerdings kein Code in der Onexecute Prozedur stürzt das Programm mit einer Fehlermeldung ab
Auch dieser Thread hat nicht geholfen:
http://www.delphipraxis.net/internal...t=idhttpserver

Schonmal danke für eure Hilfe

MfG
Christian
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Stream über idhttp versenden?

  Alt 18. Apr 2004, 18:43
weiß denn niemand, wo der Fehler liegt
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Stream über idhttp versenden?

  Alt 18. Apr 2004, 18:53
Hi,


bitte pushe die Beiträge nicht bevor 24 Stunden um sind. So lange solltest du uns Zeit geben zu Antworten. Wenn nach 24 Stunden niemand geantwortet hat, dann kannst du pushen.

  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

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

Re: Stream über idhttp versenden?

  Alt 18. Apr 2004, 19:39
Hi Chris,

zwei SAchen :

1. Für das Versenden von einfachen Datenstreams würde ich IdTcpClint und IdTcpServer nehmen, dann fällt der Overhead des HTTP-Protokolls weg.

2. Dein Fehler ist ganz einfach und liegt im Detail :

Du ließt den Stream im Server-Code mit ReadStream, das Problem daran ist , das ReadStream ohne Parameter in den ersten 4 Bytes die Länge des Streams erwartet, Du die Längen Angabe nicht mit angibst.

Lösung: Verwende im Client-Code WriteStream(Stream,true,true)

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

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Stream über idhttp versenden?

  Alt 18. Apr 2004, 20:33
Hi Datacool,
hat leider nicht geholfen.
Auch der Savedialog öffnet sich nicht. Eine showmessage, wenn sie als erste Anweisung in der onexecute-Prozedur steht, wird ebenfalls nicht geöffnet.

MfG
Christian
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

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

Re: Stream über idhttp versenden?

  Alt 18. Apr 2004, 21:20
Hi,

das liegt jetzt wieder daran, das Du HttpClient und HttpServer verwendest, würdest Du die normalen Tcp-Komponten, würde es gehen.

Wenn Du die Http-Komponeten unbedingt verwenden willst(warum auch immer ), dann must Du im Http-Server die Property CommandHandler ausschalten. Sonst tritt das OnExecute des Servers nicht ein.

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

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Stream über idhttp versenden?

  Alt 18. Apr 2004, 21:37
Hi,
den CommandHandler habe ich auch ausgeschaltet. Es funktioniert trotzdem nicht.
Die idhttp-Kompos will ich einfach nur mal so ausprobieren. Wenn man sie über Port 80 laufen lässt müsste man doch eigentlich an z.B. der Router-Firewall vorbeikommen. Deswegen will ich das mal ausprobieren.

MfG
Christian
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  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 über idhttp versenden?

  Alt 18. Apr 2004, 23:28
Hi Chris,

wie kommst Du darauf, das Du auf dem Port 80 durch eine Firewall kommst ?

Das HTTP-Protokoll, welches auf das TCP-Protokoll aufsetzt, verwendet eine P2P Verbindung von Client zu Server.

Welcher Port dabei benutzt wird, ist egal !!! Standardmäßig wird bei HTTP Port 80 verwendet.

Das heißt aber nicht, das Du durch eine Firewall kommt !! Auf dem Rechner wo der Server läuft, egal ob TCP oder HTTP muss der entsprechende Port freigegeben werden.

Gruß Data

P.S.: Es spricht auch nicht dagegen bei IdTcpClient und IdTcpServer einfach die Portnumer auf 80 zu stellen.
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  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 17: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