Tool wie Teamviewer

gekko223

Mitglied
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

Bekanntes Mitglied
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

Gesperrter Benutzer
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 :p
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

Mitglied
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...
 

Ähnliche Java Themen


Oben