Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Kleinere Probleme!Indy Komponente Serversocket/Clinetsocket (https://www.delphipraxis.net/111215-kleinere-probleme-indy-komponente-serversocket-clinetsocket.html)

FileOwner 31. Mär 2008 17:15


Kleinere Probleme!Indy Komponente Serversocket/Clinetsocket
 
Hallo Leute, bin jetzt schon etwas weiter mit Delphi, deshalb hab ich mir gedacht, ich sollte etwas programmieren wo von allem etwas vorkommt. Letztendlich bin ich jetzt beim RAT (Remote Administration Tool) angekommen. Ich finde das ist ein guter einstieg und das ganze macht auch ziemlich Spaß, nur hätte ich jetzt noch ein paar Fragen:
1. Ich möchte den Pc fernsteuern und deshalb brauche ich immer eine "live" übertragung vom Desktop ich bräuchte ausserdem die funktion dass, wenn ich zb auf das image klicke ( zb den start button), dass dort dann auch ein klick auf dem Remote PC ausgeführt wird.

2. Ich möchte ausserdem die Command Shell von windows einbinden bzw über den Client den "Server/RemotePC steuern"

3. Ich möchte Dateien austauschen. Ich stelle mir das so vor:
Ich sehe ein feld auf dem Alle festplatten mit unterordnern etc. gelistet werden. ich möchte dateien down und uploaden könen.

4. Vierte und hoffentlich letzte Frage :roll: Ich möchte eine Webseite auf dem Remotepc öffnen können.

Ich weiss, das sind richtig viele und warscheinlich auch für euch schwere fragen.
Aber es wäre echt klasse wenn ihr mir helft, auch wenn nicht auf alle 4 Fragen, also wenn ihr irgendwas wisst, bitte posten :angel:

Ich bin offen für verschiedene Lösungswege und bin für jede antwort Dankbar.

Versteckt euch nicht vor meinen Fragen :P :duck:

FileOwner 1. Apr 2008 19:53

Re: Kleinere Probleme!Indy Komponente Serversocket/Clinetsoc
 
*Push*

alleinherrscher 1. Apr 2008 21:10

Re: Kleinere Probleme!Indy Komponente Serversocket/Clinetsoc
 
Hey FileOwner!

Als ich deinen Post gelesen hab, musste ich irgendwie an mein Programm denken ;-) das macht eigentlich genau das was du programmieren willst. (www.lan-fs.de)

Vielleicht ein paar Tipps:

Zitat:

1. Ich möchte den Pc fernsteuern und deshalb brauche ich immer eine "live" übertragung vom Desktop ich bräuchte ausserdem die funktion dass, wenn ich zb auf das image klicke ( zb den start button), dass dort dann auch ein klick auf dem Remote PC ausgeführt wird.
Also das "klicken" auf dem remote computer ist noch das einfachste an der Geschichte mit dem Remote Desktop. Da gibt es die Funktionen

Delphi-Quellcode:
    SetCursorPos(x,y);
    mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);
Damit wäre die Geschichte abgehakt.
Interessanter ist die Frage

Wie schaffe ich eine Bildübertragung die möglichst in Echtzeit arbeitet

Wenn du hier im Forum ließt, findest du jede menge leute, die versuchen, eine Bildübertragung mit 25 fps zu erzeugen. Um ehrlich zu sein, bin ich froh, dass Lan.FS mit (ja nach dem, wieviel Bildinhalt sich ändert) 1-4 fps arbeitet.

Grundsätzlich musst du dir überlegen:

- Übertrage ich alle Bildinformationen, sprich das ganze Bild jedes mal neu? -> niedrige Übertragungsgeschwindigkeit

- Suche ich die Teile eines Bildes, die sich im Gegensatz zum vorherigen Bild geändert haben -> hohe CPU last.

- Komprimiere ich die Bildinformationen? -> png -> schnellere Übertragung, mehr CPU last

Lan.FS verwendet Windows Bildverarbeitungsroutinen, die (soweit ich das weiß) direkt auf der Grafikkarte arbeiten und daher relativ flott sind:

Delphi-Quellcode:
BOOL BitBlt(
  HDC hdcDest, // handle to destination DC
  int nXDest, // x-coord of destination upper-left corner
  int nYDest, // y-coord of destination upper-left corner
  int nWidth, // width of destination rectangle
  int nHeight, // height of destination rectangle
  HDC hdcSrc, // handle to source DC
  int nXSrc,  // x-coordinate of source upper-left corner
  int nYSrc,  // y-coordinate of source upper-left corner
  DWORD dwRop // raster operation code
);
Zitat:

2. Ich möchte ausserdem die Command Shell von windows einbinden bzw über den Client den "Server/RemotePC steuern"
Dafür musst du dir ansehen, wie man die cmd.exe piped, dazu empfehle ich dir:
http://www.delphipraxis.net/internal...t=cmd+umleiten.

Delphi-Quellcode:
3. Ich möchte Dateien austauschen. Ich stelle mir das so vor:
Ich sehe ein feld auf dem Alle festplatten mit unterordnern etc. gelistet werden. ich möchte dateien down und uploaden könen.
Sorry, wenn ich mich irre, aber das hört sich nach dem Lan.FS Commander an ;-)

Hier musst du dir so eine Art eigenen Verzeichnisbaum erzeugen. Wie man Dateien auflistet, findest du hier im Forum. Die Informationen musst du dann einfach in einem geeigneten Format speichern und übertragen.

Alles in Allem solltest du aber die Sache anders angehen. Du brauchst erstmal eine Basis zum Datenübertragen. (In meinem Fall wäre das der Lan.FS Kernel). Das ist die Schnittstelle zwischen deinem Programmteilen wie Remote Desktop und Command Shell und dem Internet/Netzwerk.

Der Lan.FS Kernel arbeitet so, dass er sich komplett um die Datenübertragung kümmert. D.h. im Programm rufst du nur noch eine Procedure auf:

Delphi-Quellcode:
LANFSPACKAGE:=LanfsKernel.CreatePackage(Daten, RemoteIp, etc);
LanfsKernel.AddDataToQueue(LANFSPACKAGE);
Ich hoffe, ich konnte dir ein bisschen weiterhelfen. Die Sache ist relativ komplex. Ich würde dir empfehlen, erstmal mit einer Art Kernel anzufangen, denn ein solides Grundgerüst ist das wichtigste!

FileOwner 2. Apr 2008 13:35

Re: Kleinere Probleme!Indy Komponente Serversocket/Clinetsoc
 
ERstmal danke für die Soruces, aber wie verknüpfe ich die befehle jetzt mit server und client, mach doch ma bitte ein beispiel ;)

alleinherrscher 2. Apr 2008 15:54

Re: Kleinere Probleme!Indy Komponente Serversocket/Clinetsoc
 
Naja, du bastelst dir wie gesagt erstmal so eine schnittstelle, die die Datenübertragung per INDY verwaltet. Das sind aber nicht mal eben so 5 zeilen. Grundsätzlich kannst du so Dateien verschicken:

http://www.delphipraxis.net/internal...ct.php?t=61806

In diesem Beispiel wird vor dem senden eine Datei in einen Filestream geladen:

Delphi-Quellcode:
FStream := TFileStream.Create(DateiOpenDialog.FileName, fmOpenRead);
Ich habe damit angefangen, hier keinen Filestream sondern nur allgemein einen Stream zu versenden.
Dabei hab ich mir ein Package definiert:

Delphi-Quellcode:
TMyPackage:=
Record of
      SendStream:TStream;
      IP:String;
end;
Diese Packages werden zunächst in einer Liste gespeichert, der Warteschlange.

Die Indyserver/clients sind bei mir gethreaded, also laufen in einem separaten Thread um unabhängig vom restlichen Programm zu sein. Bei dem Executeereigniss des Threads wird die Warteschlange abgearbeitet:

Delphi-Quellcode:
procedure MySendingThread.Execute
begin

MyPackage:=GetNextPackageFromQueue;

TCPSender.Host:=MyPackage.IP;

  try
    IDS := TidStreamVCL.Create(MyPackage.Sendstream);
    try
      { Senden }
      with TCPSender do
      begin
        Connect;
        try
          Socket.Write(IDS, 0, true);
        finally
          Disconnect;
        end;
      end;
    finally
      FreeAndNil(IDS);
    end;
  finally
    FreeAndNil(FStream);
  end;
end;


end;
Der Code wird so noch nicht funktionieren, weil er jetzt nur ausm Kopf geschrieben und nicht getestet ist. Er soll ja auch nur die Idee dahinter aufzeigen. Vielleicht gibts bessere Lösungen, aber ich bin bis jetzt ganz gut damit gefahren.
Danke auch nochmal an DataCool, der mir damals da etwas unter die Arme gegriffen hat!!!

Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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