Einzelnen Beitrag anzeigen

Synollus

Registriert seit: 29. Dez 2008
49 Beiträge
 
#1

Stream von Client nach Server schicken

  Alt 29. Dez 2008, 14:01
Ich habe bei euch schon oft die Suche benutzt , aber jetzt bin ich an einem Punkt angekommen, an dem ich eure Hilfe mal brauche.

Ich habe den ImageServer (über TCP) aus den Indy 9 Demos ein wenig gekürzt, damit ich den Part in mein Programm bauen kann.

Der Server:

Delphi-Quellcode:
procedure TfrmServer.ServerExecute(AThread: TIdPeerThread);
var
  Path: String;
  fStream: TFileStream;
  tBM: tBitmap;
begin
  Try
    If Copy(UpperCase(AThread.Connection.ReadLn), 1, 3) = 'SRNthen
      begin
        Path := ExtractFileDir(ParamStr(0)) + '\images\ScreenShot.BMP';
        tBM := TBitmap.Create;
        ScreenShot(0, 0, Screen.Width, Screen.Height, tBM);
        If FileExists(Path) then DeleteFile(Path);
        tBM.SaveToFile(Path);
        tBm.FreeImage;
        FreeAndNil(tBM);
        fStream := TFileStream.Create(Path, fmOpenRead + fmShareDenyNone);
        AThread.Connection.OpenWriteBuffer;
        AThread.Connection.WriteStream(fStream);
        AThread.Connection.CloseWriteBuffer;
        FreeAndNil(fStream);
        AThread.Connection.Disconnect;
      end;
  Except
    on E : Exception do
      ShowMessage(E.Message);
  end;
end;
Der Client:

Delphi-Quellcode:
procedure TfrmClient.btnServerScreenShotClick(Sender: TObject);
var
  ftmpStream: TFileStream;
  Path: String;
begin
  Try
    With Client do
      begin
        WriteLn('SRN');
        Path := ExtractFileDir(ParamStr(0)) + '\ServerScreen.bmp';
        If FileExists(Path) then DeleteFile(Path);
        ftmpStream := TFileStream.Create(Path, fmCreate);
        While connected do
          ReadStream(fTmpStream, -1, True);
        FreeAndNil(fTmpStream);
        Disconnect;
        imgMain.Picture.LoadFromFile(Path);
      end;
  Except
  end;
end;
Nun ist mir eine kleine Sache aufgefallen. In dem Beispiel schickt der Server einen Screenshot an den Clienten. Ich brauche es aber genau andersherum. Daher meine Frage: Kann ich das einfach umkehren ohne dass ich jedem Programm noch das Gegenstück reinpacken muss, sodass jede EXE Server und Client hat?

Da ich es nicht so mit Streams habe, hoffe ich, dass ihr mir helfen könnt.

[APPEND1]: Achja, zur Info: Ich verwende Indy 9.
  Mit Zitat antworten Zitat