Il mio problema è che sto creando un client FTP, e finora funziona perfettamente oltre a un dettaglio minore, che continua a infastidirmi. Ho bisogno di sapere quante linee il messaggio di benvenuto dell'FTP si estende oltre ... E questo non può essere accettabile!Come sapere la fine del messaggio di benvenuto FTP
private Socket connection;
private PrintWriter outStream;
private Scanner inStream;
public void InitiateConnection() throws IOException
{
log.Info(this, "Initiating connection to host: " + host + ":" + port);
connection = new Socket(host, port);
log.Info(this, "Connection initiated.");
outStream = new PrintWriter(connection.getOutputStream(), true);
inStream = new Scanner(connection.getInputStream());
Listen();
Listen();
Listen();
}
public String Listen() throws IOException
{
if(connection == null)
throw new IOException("Connection not initiated yet");
String response = inStream.nextLine();
log.Info(this, "Response: " + response);
return response;
}
Questa è la semplice messa a punto, ho lasciato fuori tutti gli altri codici, in quanto non ha nulla a che fare con il mio problema.
Ho provato più cose per cercare di raggiungere questo obiettivo. Impossibile Soluzione 1:
String response = "";
while(response != null)
Listen();
non riuscita Soluzione 2:
while(connection.getInputStream().available > 0)
Listen();
e innumerevoli altri ... Ma, o non funziona, oppure i metodi di blocco e attendere nuovi input. Ho anche provato con un timeout, ma non funziona perfettamente, non è una soluzione adeguata a questo problema ...
Ho bisogno di essere in grado di ottenere l'intero messaggio di benvenuto dal server FTP, senza sapere la quantità di linee ... perciò in grado di ottenere sia questo:
Response: 220-FileZilla Server version 0.9.39 beta
Response: 220-written by Tim Kosse ([email protected])
Response: 220 Please visit http://sourceforge.net/projects/filezilla/
E questo:
Response: 220-FileZilla Server version 0.9.40 beta
Response: 220 Welcome to Andrés FTP Server
Questo è il formato di risposta * multilinea *. Dalla stessa sezione: "Una risposta FTP consiste in un numero di tre cifre (trasmesso come tre caratteri alfanumerici) seguito da un testo." Non è chiaro dalle specifiche ma se si avvia FileZilla vedrete che l'unica risposta ML nella procedura di connessione è la risposta 211 sul comando FEAT. – linski
si aggiornerà di conseguenza comunque :) – linski