我的問題是我正在創建一個FTP客戶端,到目前爲止它的工作完美無缺,除了一個小細節外,還會讓我煩惱。 我需要知道FTP歡迎信息跨越多少行......而這是不能接受的!如何知道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;
}
這是簡單的設置,我省略了所有其他代碼,因爲它與我的問題沒有任何關係。
我已經嘗試了多種方法來嘗試實現這一點。 失敗解決方法1:
String response = "";
while(response != null)
Listen();
失敗解決方法2:
while(connection.getInputStream().available > 0)
Listen();
和無數其他人......但無論它不工作,或者方法阻塞並等待新的輸入。我甚至嘗試了超時,但這並不完美無缺,它不是一個適當的解決方案,這個問題...
我需要能夠從FTP服務器獲得整個歡迎消息,而不知道線的量...... 因此,我既可以得到這樣的:
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/
這:
Response: 220-FileZilla Server version 0.9.40 beta
Response: 220 Welcome to Andrés FTP Server
這是*多行*回覆格式。來自同一部分:「一個FTP回覆包含一個三位數字(以三個字母數字字符發送),後面跟着一些文本。」從規範中不清楚,但如果啓動FileZilla,您將看到連接過程中唯一的ML響應是FEAT命令中的211響應。 – linski
會相應更新:) – linski