Mój problem polega na tym, że tworzę klienta FTP i jak na razie działa on bezbłędnie poza jednym drobnym szczegółem, który podsłuchuje mnie. Muszę wiedzieć, jak wiele linii obejmuje wiadomość powitalną FTP ... A to nie do zaakceptowania!Jak poznać koniec FTP Wiadomość powitalna
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;
}
To jest prosta konfiguracja, pominięto wszystkie inne kody, ponieważ nie ma to nic wspólnego z moim problemem.
Próbowałem wielu rzeczy, aby spróbować to osiągnąć. Failed Rozwiązanie 1:
String response = "";
while(response != null)
Listen();
Failed Rozwiązanie 2:
while(connection.getInputStream().available > 0)
Listen();
i wiele innych ... Ale albo nie działa, albo metody blokowania i czekać na nowego wejścia. Próbowałem nawet z przekroczeniem limitu czasu, ale to też nie działa bezbłędnie, nie jest to właściwe rozwiązanie tego problemu ...
Potrzebuję być w stanie uzyskać całą wiadomość powitalną od serwera FTP, bez wiedzy ilość linii ... Więc mogę dostać to zarówno:
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/
I tak:
Response: 220-FileZilla Server version 0.9.40 beta
Response: 220 Welcome to Andrés FTP Server
To jest * wieloliniowy * format odpowiedzi. Z tej samej sekcji: "Odpowiedź FTP składa się z trzycyfrowej liczby (przesłanej jako trzy znaki alfanumeryczne), po której następuje trochę tekstu." Z specyfikacji nie wynika jasno, ale jeśli uruchomisz FileZillę, zobaczysz, że jedyną odpowiedzią ML w procedurze connect jest odpowiedź 211 na polecenie FEAT. – linski
zaktualizuje się odpowiednio jednak :) – linski