# Tool wie Teamviewer



## gekko223 (30. Sep 2010)

Guten Tag!

Also ich möchte ein Programm schreiben, welches wie Teamviewer funktioniert.

Nur sollen die Verbindung zu meinen Server immer von den Clients ausgehen, da ich dann über Port 80 arbeiten kann und nicht das ganze Zeug mit der Firewall habe.


Hat jemand schon mal was ähnliches Programmiert, oder hat jemand eine Ansatz?

Quellcode brauch ich nicht, wenn jemand einen Vorschlag oder ein Prinzip hat, würde mir das schond ehr helfen......


----------



## hemeroc (30. Sep 2010)

Hi,
ich entwickle gerade mit einem Studienkollegen im Prinzip soetwas wie Teamviewer im Rahmen unserer Baccelorarbeit.
Die grundsätzliche Frage die du dir stellen musst ist willst du mit pure-Java arbeiten oder willst du native Ansätze verwenden. Letzteres ist wesentlich schneller ersteres wohl einfacher.
LG Hemeroc


----------



## Kr0e (30. Sep 2010)

Hi,

die Frage ist, wieviel Aufwand zu betrieben willst  TeamViewer läuft über UDP und durch Holepunching wird P2P ermöglich.
Grad bei Remoteanwendungen macht UDP Sinn. Wenn juckts schon, wenn mal ein Befehl nicht ankommt... Außerdem tritt das garncith so oft auf, wie alle immer meinen^^ Achja und nicht falschverstehen: Auch ohne holepunching würde ich UDP nehmen...

Es gibt 2 Methoden:

Die 1. ist ansich total einfach: MAch nen Screenshot, kompriermier ihn, verschike ihn. Auf der Gegenseite das gleiche  für Tastatur / Mausbefehle... Und fertig =) Leider wirst du da aber eine Grenze stoßen... Will dich nur shconmal drauf vorbereiten 
Habe vor 2 monate mal was ähnliches versucht, leider ist Java dazu nicht geeignet. Das Problem ist, das JAVA nur eine möglichkeit kennt, Screenshots zu machen: Robot.getScreenShot oder so ähnlich heißt der Befehl. Diese Funktion ist aber sehr langsam und ineffizient. Vorallem weil die äußerst kluge Impl. immer ein neues Bild erstellt und alle Puffer nicht wieder neuverwertet. ERgo: Bei modernen PCssind Auflösungen von 1280*1024 oder 1680*1090 absolut normal. Bei 24 bit Farbtiefe macht das pro Screenshot eine
Größe von 5.493.600 Bytes oder auch 5,5 MB. Sofern es einigermaßen ruckelfrei gehen soll, brauchst du ca. 10 - 20 Bilder.
Jeder Screenshot bruacht bei JAVa ca 100 ms bei hoher Auflösung (PI*Daumen). Du wirst also rein zeittechnisch nich über 10 Bilder kommen pro Sekunde (Und ich habe grad noch garnicht die Netzwerkgeschwindigkeit erwähnt ) Nur beim Erstellen der Bilder gibt es einen Engpass. Das 2te Problem ist die Kompression, man kann zwar bmp Dateien gut komprimieren ,aber für Internetverhältnisse sind auch 200 kb pro Bild noch sehr viel... ERgo alles nicht so einfach. CPU LAst beim Komprimieren darf auch nicht vergessen werden!

2. Methode. Man macht zwar gleich viele Screenshots aber schickt nurdie Veränderung. Dann musst du allerdigns erstmal berechnen, was die Unterschiede sind. Das erfordert schon ein gewisses MAß an Mathekenntnissen. Aber das Problem mit langsamen Screenshots kannst du damit immernoch nicht umgehen.

Ich habs mal mit C++/WinAPI probiert. Das geht ratzfatz. Vorallem weil man hier vorreservierte Speicherbereiche angeben kann.

Wenn du Ahnung von C++ hast, solltest du JNI evt benutzen. Damit wäre das dannn sehr viel schneller. Am besten noch direkt DirectByteBuffers nutzen, damit die DAten garnicht erst auf den Java Heap gequetscht werden müssen.

Mfg,

Chris


----------



## gekko223 (30. Sep 2010)

Vielen Dank für die Antworten 

Was ich vielleciht vergessen habe zu sagen ist, dass einer der Clients nicht ein PC ist; d.h. von einem PC-Client wird ein Befehl (immer über den Server) geschickt oder z.B. dass eine Variable verändert werden soll, und dies soll auf dem anderen Client(z.B. ein Handy welches Internetzugang hat) ausgeführt werden...

Also ein Pc und ein Handy(als Beispiel) verbinden sich zum Server; der Pc holt sich dann die Menüfiles und Variablen usw. und baut sich damit eine grafische Oberfläche auf. Auf dieser Oberfläche darf er navigieren und wenn er etwas ändert, soll es auf dem anderen Client ausgeführt werden.
So in der Art wäre das Prinzip...


----------

