Einzelnen Beitrag anzeigen

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