|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
FTP e comando LIST
Salve a tutti,
sto cercando ormai da tempo di risolvere questo problema: non riesco a creare un metodo java che effettui il LIST del contenuto di una directory remota. Linguaggio di Programmazione: JAVA L'unica cosa che mi dice è: 331 User name okay, need password. 230 User logged in, proceed. 150 Opening ASCII mode data connection for /bin/ls. 426 Data connection closed, transfer aborted. e poi rimane appeso nonostante ci sia un socket.close(). In pratica dopo aver inviato il LIST al server, lui stampa "150 Opening..." e poi alla fine non stampa un bel nulla di quello che gli ho chiesto. Cosa Significa, e soprattutto come faccio ad aprire una connessione di tipo ascii? Io so che posso aprire stream orientate al Byte, e stream per caratteri. Ma cmq non riesco lo stesso a risolvere nulla. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
se vuoi usare lo stesso socket anche per il transito dei dati chiama
PASV prima del comando LIST |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Ciao!
ho provato.. ma non riesco comunque a ricevere la lista... Per favore, mi posteresti un pezzetto di pseudocodice per capire meglio la situazione??? Io quando vado a leggere i dati provenienti dal server uso un BufferedReader.. e poi ciclo while... Codice:
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream forServer = new PrintStream(socket.getOutputStream());
forServer.println("LIST \n");
tring line = inFromServer.readLine();
while(!line.equals("")){
System.out.println(line);
line = inFromServer.readLine();
}
neanche se metto forServer.println("PASV \n"); dopo list. Inoltre non mi esce mai dal ciclo... forse non è giusta la condizione.. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
devi metterlo prima del comando list, non dopo. |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
ho fatto qualche prova e non basta.
dopo aver dato il comando PASV il server apre un'altra porta (non privilegiata) e la restituisce al client. tu devi aprire una connessione verso quella porta, il comando list lo dai sul primo socket, ma l'output ti verrà scritto sul secondo. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Ciao!
si, scusa, anche se non funzionava.. PASV l'ho messo prima del LIST... cmq.. ora ho capito che servono 2 connessioni. OK, per la connessione di controllo apro un socket client Socket control = new Socket("hostname",21); e tramite questo invio il list al server. Adesso.. supponendo che io voglia aprire un Socket dati (visto che sembra questa la soluzione migliore) devo aprire un ServerSocket e creare un while ???? e poi leggere? E soprattutto.. devo usare la porta 20, oppure una casuale mettendo new ServerSocket(20) ? Dico questo perchè ho letto che di default la porta 20 è destinata ai dati. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
puoi utilizzare due approcci:
1) crei un ServerSocket in ascolto sulla porta 20e poi usi la sequenza: - USER username - PASS password - PORT xxx,xxx,xxx,xxx (vedi la sintassi del comando) - LIST e leggi sul socket che ascolta sulla porta 20 2) usi la sequenza: - USER username - PASS password - PASV poi leggi la risposta di PASV che contiene la porta su cui aprire un secondo socket, lo apri e poi dai il comando - LIST e sul secondo socket leggi il risultato. Ciao |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jan 2005
Città: Pordenone
Messaggi: 164
|
USER
PASS TYPE A PASV LIST -al prova con questa sequenza [edit] al limite prova a levare il -al nelle opzioni di LIST |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Grazie ragazzi,
ora provo con il ServerSocket sulla 20. -R3NN@! io ho provato come dici tu, ma non mi funziona... si blocca dopo essere entrato in passive mode. |
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Jan 2005
Città: Pordenone
Messaggi: 164
|
Quote:
Codice:
[R] Connecting to xxxx.net -> IP=xx.xxx.xxx.xx PORT=21 [R] Connected to xxxx.net [R] 220-FTP server ready. [R] 220 This is a private system - No anonymous login [R] USER xxxxxxxx [R] 331 User xxxxxxxxx OK. Password required [R] PASS (hidden) [R] 230-Your bandwidth usage is restricted [R] 230-User xxxxxxxxx has group access to: users [R] 230 OK. Current restricted directory is / [R] SYST [R] 215 UNIX Type: L8 [R] FEAT [R] 211-Extensions supported: [R] EPRT [R] IDLE [R] MDTM [R] SIZE [R] REST STREAM [R] MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*; [R] MLSD [R] ESTP [R] PASV [R] EPSV [R] SPSV [R] ESTA [R] 211 End. [R] PWD [R] 257 "/" is your current location [R] TYPE A [R] 200 TYPE is now ASCII [R] PASV [R] 227 Entering Passive Mode (porte) [R] Opening data connection IP: xxx.xx.xxx.xx PORT: 50062 [R] LIST -al [R] 150 Accepted data connection [R] 226-Options: -a -l [R] 226 21 matches total [R] List Complete: 1 KB in 0,77 seconds (1,7 KB/s)
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
da telnet riesci a visualizzare l'output del comando LIST? con uno solo è impossibile, per lo stesso motivo per cui non funziona il client di fbcyborg. |
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Jan 2005
Città: Pordenone
Messaggi: 164
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Scusate una cosa ragazzi,
sono riuscito a fare un metodo main che effettua solo questo benedetto list. Soltanto che ho riscontrato dei difetti: nella mia rete locale funziona tutto alla perfezione; io ho alice e sono dietro a un router un mio amico ha fastweb. Se io apro un qualunque server ftp, il mio amico non riesce a connettersi con questo piccolo client ftp appena creato. Premetto che non è un problema di routing e di port forwarding (usando cuteftp ci si riesce benissimo a connettersi). Nello sviluppare questo client, bisogna tener conto di altre cose visto che un pc si può trovare dietro nat? |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
mmh... ok
che quindi va bene in ogni caso... grazie mille |
|
|
|
|
|
#16 |
|
Junior Member
Iscritto dal: Sep 2010
Messaggi: 29
|
Ciao fbcyborg , avrei bisogno di sapere come hai fatto la tua procedura list se ce l'hai ancora , è l'unica che mi manca per completare il mio client FTP .
Grazie mille intanto ! |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Cacchio sei riuscito a riesumare un thread del 2005!
È passato un sacco di tempo da quando ho fatto quella cosa, comunque ecco il codice della funzione LIST: Codice:
public void doList() throws IOException{
outToClient.println("150 Opening data connection for /bin/ls.");
Socket socket = new Socket(clientIp,clientPort);
String[] lista = List.ls(localPath);
PrintStream out = new PrintStream(socket.getOutputStream());
for(int i=0;i<lista.length;i++){
out.println(lista[i]);
}
out.close();
outToClient.println("226 Transfer complete");
socket.close();
}
Comunque il core del metodo è quello. Ciao! |
|
|
|
|
|
#18 |
|
Junior Member
Iscritto dal: Sep 2010
Messaggi: 29
|
Grazie mille , ce l'ho fatta , con un altro metodo ma similare al tuo, ho utilizzato un vector , daveero gentilissimo , grazie mille .
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
Grande... è stato un piacere. Ciao!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:03.




















