|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
[VB6] Creare programma VNC?
Ciao a tutti, oggi mentre usavo Team Viewer mi è venuta una curiosità su come funzioni questo tipo di software. Programmo in VB6 e qualche mese fa avevo provato a fare qualcosa del genere ma tutto a livello testuale ovvero: utilizzando i socket inviavo il comando che volevo eseguire sulla macchina remota e quest'ultima lo eseguiva (parlo di comandi dati dal prompt). In locale funzionava, ma dato che ho Fastweb non riuscivo a comunicare con gli altri al di fuori della rete. Per ovviare a questo problema ho usato uno stratagemma molto grezzo: il comando che io devo inviare alla macchina remota viene salvato come file di testo sul mio server FTP di Altervista, dopodichè l'altro scaricando questo file txt ne leggeva il contenuto, lo eseguiva e salvava l'output sempre su altervista in modo che io potessi leggere se è andato a buon fine o no.
Ora mi sono chiesto come fa Team Viewer a funzionare anche se io che sono Fastweb mi trovo sotto NAT e quindi non direttamente visibile agli altri? A livello di programmazione come avviene l'invio delle immagini remote? Infine per fare muovere il mouse in remoto come lo muovo io basta inviare le mie coordinate al suo computer e con la API fare muovere il suo mouse di conseguenza? Scusate per il post un pò lunghino spero che qualcuno sappia darmi una risposta e soprattutto spero che nessuno mi dia del lamerozzolo perchè non lo sono
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
veramente non sapevo che il server VNC funzionasse anche dietro NAT (qualcuno confrma?), comunque esiste una tecnica che si chiama Hole Punching e che é molto piu attuabile se si lavora con UDP piuttosto che TCP; di norma per i programmi di VoIP é naturale usare questa tecnica, anche perché usano UDP in quanto la performance di rete é cruciale e non é indispensabilissimo che i pacchetti arrivino tutti quanti, quindi si vuole evitare l'overhead dovuto a TCP; Skype ad esempio la usa.
per quanto riguarda l'invio di immagini sulla connessione: é un sistema che disapprovo a causa della pesantezza (VNC infatti é molto lento rispetto ad altri, vedi piu avanti), comunque banalmente segui questo loop: - prendi uno screenshot - comprimi al volo - invia sul socket - il client decomprime e disegna nella sua finestra esiste un approccio diverso che risulta molto piu efficiente e consiste nell'inviare al client tutte le informazioni necessarie a ricostruire le finestre: posizione, dimensioni, decorazioni, testo contenuto, controlli nativi, ecc. RDP ad esempio (il protocollo usato dai Terminal Services) prevede questo approccio, infatti le sessioni di Desktop Remoto di Windows sono molto piu ragionevoli dell'uso di VNC; tuttavia in questo modo c'é lo svantaggio del non poter lavorare da remoto con un sistema diverso (es.: con questo sistema non é possibile controllare Linux da remoto con Windows) perché le informazioni necessarie a ricostruire le finestre sono specifiche del subsystem grafico del sistema operativo. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
GRAZIE MILLE!! non avrei potuto desiderare una risposta migliore di questa!
ho afferrato praticamente tutto tranne sta cosa dell' "UDP Hole Punching". Cioè a livello pratico creo un socket e come protocollo lo imposto su UDP, poi assegno le rispettive porte e dovrei riuscire a comunicare DIRETTAMENTE con il computer remoto? Oppure devo seguire il ragionamento che ho trovato su QUESTA breve guida? mi sembra di avere capito quindi che funziona così: IO --> NAT_FASTWEB --> SERVER PUBBLICO --> COMPUTER_REMOTO viceversa COMPUTER_REMOTO --> SERVER PUBBLICO --> NAT_FASTWEB --> IO Se imposto il protocollo TCP sono sicuro che non funziona, con UDP non serve fare nulla di speciale giusto? grazie mille ancora della tua disponibilità
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
up
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
|
showmypc instaura semplicemente una connessione sulla porta TCP 80 di un loro server, che dunque bypassa completamente il NAT.
Teamviewer se non sbaglio utilizza la stessa tecnica, ma sinceramente non ricordo se usa la porta 80...
__________________
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
però come fanno alcuni programmi a comunicare direttamente anche se dietro NAT? grazie!
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
|
Quote:
Per uscire, tu puoi uscire senza problemi dato che provvederà il nat a fare tutto, se invece qualucno dall'esterno vuole contattarti direttamente non può farlo. Devi essere prima tu a contattare lui, così il nat crea il "canale" e lui ti può rispondere utilizzando lo stesso "canale". Appoggiandosi a server esterni dunque non si ha alcun problema dato che è il server che viene contattato dal tuo pc e gestisce le connessioni con gli altri utenti allo stesso modo, anche se pure loro sono dietro NAT
__________________
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
ok quindi la parte teorica l'ho capita... però dal lato pratico come faccio a far sì che questo "canale" sia sempre lo stesso? ti posso spiegare brevemente in VB6 come lo farei? grazie della disponibilità mi siete di grande aiuto!
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
|
semplicemente non puoi perchè di solito viene utilizzato un NAT dinamico che, a differenza di quello statico, sceglie sempre una porta diversa per l'instaurazione del canale di comunicazione.
Se il NAT fosse stato statico allora sarebbe stato sufficiente per contattarti dall'esterno utilizzare l'indirizzo pubblico del NAT collegandoti alla porta che poi sarebbe stata girata al tuo pc. L'unica cosa che puoi fare è utilizzare qualche server esterno a cui appoggiarti che si occupi di gestire le connessioni nattate.
__________________
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
|
....non ne conosco...
![]() intendevo che dovresti creartelo tu.
__________________
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
|
basta crearti un serversocket in ascolto che apra un nuovo thread per ogni nuova connessione in ingresso e devi prevedere un sistema di identificativi univoci che permettono di associare al server i vari pc registrati con le varie connessioni.
Un pò come la password di team viewer, ma se vuoi puoi anche legarla staticamente ad un pc anzichè inserirla ogni volta in maniera dinamica... A quel punto basta fare da bridge tra la connessione di utente e quella del'altro....
__________________
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
ok grazie! ho cercato un pò come fare ma serve per forza sapere java e io non lo conosco affatto
non c'è un servizio in cui mi registro e poi fa tutto lui?
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
|
Quote:
cmq guarda che i socket e i thread li puoi utilizzare anche con VB6 se non sbaglio...
__________________
|
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
comunque con VB6 non posso mettere un programma sul server che dovrà fare da tramite... o sbaglio?
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Servizi, nel senso stretto del termine, non ne puoi creare. Per quanto riguarda il threading c'è una via, che io sappia, abbastanza "laterale" e comunque non tanto raccomandabile ( può causare instabilità ). Dal momento che stai praticamente a 1 e mezzo su 3, passa a VB.NET. |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
quindi quale sarebbe questa via "laterale"?
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Il framework è uno scoglio davvero risibile se paragonato alla difficoltà nell'implementare una soluzione VB6 davvero stabile e sicura che fa uso di threading, e che oltretutto debba "assomigliare" il più possibile ad un Windows Service ( e te lo dice uno che vede con molta simpatia il VB6 / VBA ). Detto questo, uno dei migliori articoli sul threading in VB6 è probabilmente questo : http://www.freevbcode.com/ShowCode.Asp?ID=1287 Personalmente non ho mai usato threading in VB6, perciò non ho miei esempi da proporre. Buona lettura... e buona fortuna ! |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jul 2007
Città: Bordighera (IM)
Messaggi: 1047
|
Quote:
__________________
.:Programmatore web e Windows, WebDesigner - Portfolio:. TRATTATIVE CONCLUSE: 10 TUTTE POSITIVE! Case Corsair 240 *** CPU AMD 1700 *** MotherBoard Asus PRIME B350M *** VGA Nvidia Zotac GTX1060 6gb *** RAM Corsair 16gb DDR4 *** PSU Corsair CX650M *** SSD Samsung 850 evo 500gb *** HardDisk 1tb |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:12.





















