View Full Version : [Messenger] Trasferimento file
Mi stavo chiedendo come i vari messenger (windows live,skype ecc) implementino il trasferimento di file.
Avevo realizzato in java una chat client-server multi.. con trasferimento di file 1 ad 1...
La chat testuale è realizzata tramite server.. gli utenti scrivono al server e quest'ultimo lo rimanda agli altri...
Il trasferimento l'avevo fatto con una connessione diretta tra chi passa il file a chi lo riceve, creando una nuova socket tra di loro..
Solo che il mittente del file (ServerSocket) se coperto da router deve avere una porta aperta...
Ma questo su msn nn succede.. Chi ha un router può tranquillamente mandare file senza toccare il router..
Come viene realizzato allora il tutto ?
E' come la chat testuale, il server si occupa di fare da tramite
Cioè il mittente del file lo manda al server che a sua volta lo manda al destinatario ?... ma serve necessariamente un server buono in up e down.. xkè c'è un doppio upload..
E poi provando con dei programmi come wireshark quando su msn passo un file mi arrivano pacchetti con l'ip del destinario.. xciò ho pensato ke la connessione sia diretta per il trasferimento dei file..
Mi stavo chiedendo come i vari messenger (windows live,skype ecc) implementino il trasferimento di file.
Avevo realizzato in java una chat client-server multi.. con trasferimento di file 1 ad 1...
La chat testuale è realizzata tramite server.. gli utenti scrivono al server e quest'ultimo lo rimanda agli altri...
Il trasferimento l'avevo fatto con una connessione diretta tra chi passa il file a chi lo riceve, creando una nuova socket tra di loro..
Solo che il mittente del file (ServerSocket) se coperto da router deve avere una porta aperta...
Ma questo su msn nn succede.. Chi ha un router può tranquillamente mandare file senza toccare il router..
Come viene realizzato allora il tutto ? se la connessione peer to peer risulta impossibile in qualunque maniera (entrambi gli utenti nattati, firewallati, o quello che ti pare) allora semplicemente il file deve passare per il server; nessuna magia insomma :)
so di una tecnica denominata Hole Punching che però non credo sia usata da MSN, anche perché potrebbe non funzionare sempre; comunque a grandi linee funziona così: supponi che A voglia connettersi a B e che B sia dietro NAT; entrambi A e B si connettono ad un server e in questo modo nella tabella NAT di B viene creata un'entry che permette al router di indirizzare a B tutti i pacchetti provenienti dal server; questa entry viene sfruttata da A (tramite spoofing) per inviare pacchetti a B, di conseguenza A può inviare dati a B senza farli passare per il server. ulteriori dettagli non me li ricordo, fai una ricerca su Wikipedia; comunque il motivo percui la cosa potrebbe non funzionare è che la NAT non è illimitata, e anzi nei routers casalinghi è piuttosto limitata, e quindi non è possibile stabilire troppe connessioni in questa maniera; credo che già eMule e chissà quanti altri sistemi di filesharing utilizzino questa tecnica, ed in più lo fanno anche i client VOIP.
Ok .. mi informerò su questa parte...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.