View Full Version : [Java] Invio Files su socket
Ciao ragazzi , come promesso rieccomi , il mio client FTP con uso socket procede alla grande , ora leggo tutti i comandi che hanno risposta direttamente dal canale comandi ( 21 ) , il fatto è che ora dovrei fare in modo di uploadare qualcosa sul Server FTP , a questo punto pensavo una connessione ATTIVA , mi sembra la più facile da fare , ed ecco i primi porblemi , questo è il codice che uso nel caso il comando dato sia "send"
if (cmd.equals("send")) { // Invio file tramite SEND
cmd = "port 82,56,110,160,20,20"; // Setto la trasmissione attiva
pw.println(cmd);
mess = br.readLine();
System.out.println(mess);
cmd = "type I";
pw.println(cmd);
mess = br.readLine();
System.out.println(mess);
cmd = "send";
pw.println(cmd);
mess = br.readLine();
System.out.println(mess);
while (br.ready()==true) {
mess = br.readLine();
System.out.println(mess);
}
TransferThread transferthread = new TransferThread(); //costruttore thread
transferthread.start();
} //fine IF
Il thread che apro è quello che dovrebbe riguardare l'invio del file , però anche qui ho un dubbio , come apro una connessione dati con il socket su un'altra porta?
Grazie mille in anticipo!
clockover
14-09-2010, 01:20
Il thread che apro è quello che dovrebbe riguardare l'invio del file , però anche qui ho un dubbio , come apro una connessione dati con il socket su un'altra porta?
Grazie mille in anticipo!
La apri normalmente come quando ti sei connesso al server! O non sono riuscito a capire io il dubbio che hai?
banryu79
14-09-2010, 08:03
Penso tu debba costruire e gestire una nuova Socket, dedicata appunto al canale per il trasferimento dei dati, che chiuderai al termine del trasferimento stesso.
ok, è quello che pensavo anch'io , però ecco l'inghippo :
- La socket su cui lavoro è la 21 dell'host idnob.altervista.org
--> Socket s = new Socket ("idnob.altervista.org" , 21 );
- I comandi su questa porta come il pwd ecc... funzionano , se ad esempio però mando un "list" o un "put" allora devo aprire una nuova porta sulla stessa connessione .
Nel Thread facccio: Socket s1 = new Socket ("idnob.altervista.org",20);
Mi dice che Connection Refused . Devo forse mettere in wait la socket s ?
Gentili come al solito ragazzi!
è una connessione passiva? :E
clockover
14-09-2010, 09:39
Ovviamente dovrai avere anche una ServerSocket in attesa sulla porta 20 sul server!
tomminno
14-09-2010, 09:56
ok, è quello che pensavo anch'io , però ecco l'inghippo :
- La socket su cui lavoro è la 21 dell'host idnob.altervista.org
--> Socket s = new Socket ("idnob.altervista.org" , 21 );
- I comandi su questa porta come il pwd ecc... funzionano , se ad esempio però mando un "list" o un "put" allora devo aprire una nuova porta sulla stessa connessione .
Nel Thread facccio: Socket s1 = new Socket ("idnob.altervista.org",20);
Mi dice che Connection Refused . Devo forse mettere in wait la socket s ?
Gentili come al solito ragazzi!
Direi che stai lavorando con il protocollo FTP. Cerca di usare qualche libreria specifica per tale protocollo che ti conviene.
-E' una connessione passiva
-La serverSocket è sul server (per esempio di altervista)
- Di librerie specifiche FTP ci sono quelle della sun , ma non le voglio usare proprio perchè le voglio fare io ( voglio capire il funzionamento ) in maniera molto rudimentale , ma funzionante :)
Se do il comando "passive" , il server mi risponde con l'ip e la porta con la sintassi: ip,ip,ip,ip,numero1,numero2 --> numero1,numero2 servono direi per il calcolo della porta a cui connettersi , calcolandola tramite numero1*256+numero2 .
Non capisco come connettermi all'host che vi dicevo sulla porta che abbiamo appena calcolato,cioè quella che il server ci ha dato per la connessione .
creando un altro socket
comunque rudimentale e funzionante non vanno d'accordo :asd:
clockover
14-09-2010, 10:23
Ma la connessione sulla socket del server devi farla normalmente come qualsiasi altra socket! Però devi farla prima sulla ServerSocket, quindi il server dovrà avere una server socket in attesa sulla porta interessata!
- Se creo un'altra socket mi die che la connessione è rifiutata
@tuccio : la ferrari non è altro che una 127 con upgrade :) (rudimentale/funzionante)
- La serverSocket non la controllo io , sono i server FTP di tutto il mondo che hanno la serverSocket in ascolto , io mi devo limitare a fare un client ftp.
Direi che il server si mette in attesa sulla porta che mi comunica dopo il comando "passive".
comunque adesso mi è venuta un idea , prendo la stringa che mi da il server , estrapolo l'ip , calcolo la porta e apro una nuova socket verso quell'ip e quella porta.
Stasera vi dirò il risultato.
Grazie mille per la pazienza e nel caso ci fossero nuove idee dite pure :)
clockover
14-09-2010, 10:41
- Se creo un'altra socket mi die che la connessione è rifiutata
@tuccio : la ferrari non è altro che una 127 con upgrade :) (rudimentale/funzionante)
- La serverSocket non la controllo io , sono i server FTP di tutto il mondo che hanno la serverSocket in ascolto , io mi devo limitare a fare un client ftp.
Direi che il server si mette in attesa sulla porta che mi comunica dopo il comando "passive".
comunque adesso mi è venuta un idea , prendo la stringa che mi da il server , estrapolo l'ip , calcolo la porta e apro una nuova socket verso quell'ip e quella porta.
Stasera vi dirò il risultato.
Grazie mille per la pazienza e nel caso ci fossero nuove idee dite pure :)
adesso ti ho capito... tu vuoi fare solo un client ftp :D ... io pensavo volevi emulare il tutto, sia client che server...
già , non sono stato preciso , scusate , devo solo fare il client funzionante con tutti gli N server FTP del mondo :) (anche se sono n-1 fa lo stesso) :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.