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