Salve a tutti, ho cercato in lungo e in largo ma non ho trovato nulla che mi chiarisse le idee.
Sto implementando un applicazione client che si connette ad un server tramite il protocollo FTP.
In questo punto:
codice:
socket = new Socket(host, port);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String response = reader.readLine();
//Si attende un 220
System.out.println(response);
if (!response.startsWith("220")) {
throw new IOException("I received an unknown response when connecting to the FTP server: " + response);
}
writer.write("USER" + user + "\r\n");
writer.flush();
response = readLine();
//Si attende un 331
System.out.println(response);
if (!response.startsWith("331")) {
throw new IOException("I received an unknown response after sending the user: " + response);
}
Subito dopo l'inizio della connessione, il server dovrebbe inviare il 220 di avvenuta connessione, il problema e' che (testing fatto con il server di Altervista) non invia una sola riga di 220 ma ne invia addirittura 5!!!
Ecco l'output del server:
220---------- AlterVista FTP, based on Pure-FTPd [privsep] ----------
220-Sei l'utente numero 17 di 120 consentiti
220-L'ora locale è 13:23. Porta del server: 21.
220-Questo è un sistema privato - Nessun login anonimo
220 Sarai disconnesso dopo 5 minuti di inattività.
Ho provato a mettere un ciclo che catturasse tutte le linee per poi inviare writer.write("USER" + user + "\r\n"); ma ovviamente dopo 5 ciclate il programma si blocca in attesa di un output del server che non arriverà mai.
La mia domanda quindi e' questa: come posso resettare l'inputStream della socket? Ovvero vorrei leggere la prima riga con il 220 e poi eliminare le altre righe con 220 cosi' da inviare writer.write("USER" + user + "\r\n");
Ho provato anche con il metodo available(), che a quanto ho capito dovrebbe restituire il numero di byte leggibili dal flusso, quindi se restituisce 0 il buffer dell'input dovrebbe essere vuoto.
codice:
while(socket.getInputStream().available()>0){
reader.readLine();
}
Cosi' dovrebbe ignorare le altre righe ma non so perche' (forse non ho ben compreso bene il metodo available) non restituisce mai un numero maggiore di 0... eppure ci sono altre 4 righe che il server mi ha inviato che iniziano per 220... non so piu' dove sbattere la testa