Remote Desktop

Soyez le premier à donner votre avis sur cette source.

Vue 7 398 fois - Téléchargée 1 945 fois

Description

Programme client/serveur permettant de visualiser l'écran d'un poste distant.
L'accès au serveur est sécurisé (mot de passe) et l'échange est chiffré.
Il n'y a pas de contrôle clavier/souris pour le moment, mon objectif été
de développer en priorité la partie visualisation écran.

Pour le fonctionement : le serveur récupère les dimensions de l'écran et
l'envoie au client pour qu'il initialise la fenêtre aux bonnes dimensions, il
envoie ensuite au client l'essemble des pixels de l'écran. Puis envoie sans cesse
(uniquement) les pixels qui ont changé par rapport aux captures précèdentes,
cela permet d'éviter d'envoyer à chaque fois l'ensemble des pixels de l'écran et
donc d'avoir de meilleurs performances de rafraîchissement côté client.
Pour un souci de performance j'ai également opté pour le protocole UDP qui est
plus rapide que TCP pour l'envoie des bloques de pixels.

Côté client, le programme récupère au fur et à mesure les bloques de pixels
pour les dessiner dans la fenêtre.

J'ai testé ce programme principalement sur réseau local et les performances
sont plutot satisfaisante (je n'arrive pas a faire mieux), j'ai testé que très
peu de fois sur une connexion "longue distance" et là les performances ne sont
pas top... Si vous avez des idées/conseils pour améliorer les performances de
capture/comparaison/transfert/écriture des pixels pour optimiser le
rafraichissement je suis preneur :)

Le client et le serveur utilisent Qt pour l'interface graphique, les API Win pour
la communication réseau et la capture de pixel côté serveur, OpenSSL pour le
chiffrement RSA et la bibliotheque Pthread.


MAJ 1 (30/09/2013) :

-Ajout d'une fonctionalité remote shell
-Ajout d'une fonctionalité capture d'écran
-Ajout d'une fonctionalité controle de la souris
-Possibilité de réduire la fenetre serveur dans la zone de notification

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ichiriac
Messages postés
195
Date d'inscription
lundi 28 janvier 2013
Statut
Membre
Dernière intervention
13 janvier 2017
3 -
pas encore testé mais vu la capture j'adore !!!
EGP-Swyx
Messages postés
7180
Date d'inscription
dimanche 18 mars 2012
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
comme idée tu pourrais compresser les blocs? ça utilise la puissance de calcul du pc au lieu de tirer sur la connexion.

En tout ca ça me semble propre =)
ganjarasta
Messages postés
23
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
1 février 2014
> EGP-Swyx
Messages postés
7180
Date d'inscription
dimanche 18 mars 2012
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Effectivement actuellement c'est la connexion qui a une influence sur les performances de rafraîchissement, ton idée est bonne et j'y avais déjà pensé mais je ne sais pas comment faire pour faire une compression des bloques de pixels.
ganjarasta
Messages postés
23
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
1 février 2014
> ganjarasta
Messages postés
23
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
1 février 2014
-
Bon j'ai fait un test, à la place d'utiliser 24 bits/pixel, j'ai fait du 8 bits (donc un affichage en niveaux de gris). Ce qui induit une diminution de la quantité de données transmit sur le réseau. Mais je n'ai pas remarqué d'influence sur les performances de rafraîchissement..
cs_christophedlr
Messages postés
257
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
30 mai 2016
4 -
Ton projet est intéressant et m'intéresse beaucoup (tan sur la partie programmation que pour le résultat, car je cherche un bon remote desktop depuis longtemps et que je pourrais utiliser depuis le boulot sans nécessité l'installation d'un driver comme UltraVNC ou TeamViewer).

Pour les pixels, au lieu de les envoyer, tu peux envoyer directement une capture d'écran compressée (ZIP, qui est géré nativement par QT, Deflate idem, bref tu as pas mal de choix ;) ) ; la transmission est plus rapide et pour le coup tu peux envoyer 20 voir 30 images par secondes, le client recevra sans exploser la connexion.

Le protocole UDP est intéressant, mais tu peux recevoir les paquets de données dans un ordre différent de l'envoi, voir même en perdre ; ce qui n'est pas idéal pour de l'accès à distance, le protocole TCP est à préféré dans ce type de projet.

Pour les captures d'écran, QT le gère nativement, et à voir mais je crois qu'il est capable aussi de détecter ce qui a changé entre deux captures (ou alors tu fais toi même l'algo de différenciation), de sorte que tu peux n'envoyer que les données de l'image qui ont changé, le tout compressé bien sur ; cela sera plus légers déjà que d'envoyer seulement des pixels même si ce n'est QUE ceux qui changent.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.