And*_*ock 8 java sockets ftp inputstream
我的问题是我正在创建一个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;
}
Run Code Online (Sandbox Code Playgroud)
这是简单的设置,我遗漏了所有其他代码,因为它与我的问题没有任何关系.
我尝试了多种尝试来实现这一目标.解决方案1失败:
String response = "";
while(response != null)
Listen();
Run Code Online (Sandbox Code Playgroud)
解决方案2失败:
while(connection.getInputStream().available > 0)
Listen();
Run Code Online (Sandbox Code Playgroud)
无数其他......但要么它不起作用,要么方法阻止并等待新的输入.我甚至试过了超时,但这也无法完美地工作,这不是解决这个问题的正确方法......
我需要能够从FTP服务器获取整个欢迎消息,而不知道行数...所以我可以得到这个:
Response: 220-FileZilla Server version 0.9.39 beta
Response: 220-written by Tim Kosse (Tim.Kosse@gmx.de)
Response: 220 Please visit http://sourceforge.net/projects/filezilla/
Run Code Online (Sandbox Code Playgroud)
还有这个:
Response: 220-FileZilla Server version 0.9.40 beta
Response: 220 Welcome to Andrés FTP Server
Run Code Online (Sandbox Code Playgroud)
如果仔细查看消息,可以看到除了最后一行之外的所有行都有一个-状态代码.然而,最后一行有一个指示最后一行.
您可以在RFC 959第4.2节中阅读:
因此,多行回复的格式是第一行将以确切的所需回复代码开头,紧接着是连字符," - "(也称为Minus),后跟文本.最后一行将以相同的代码开头,紧接着是Space,可选的是一些文本,以及Telnet的行尾代码.
关于第二到第二行没有任何说法,但它们具有与第一行相同的格式是合乎逻辑的.
更新:FTP协议似乎有严重的文档记录,但我发现另一个引用与我上面相同:
在TCP/IP指南中提到,
回复可能包含多行文本.在这种情况下,每行以回复代码开头,除了最后一行之外的所有行在回复代码和回复文本之间都有连字符,以指示回复继续.最后一行在回复代码和回复文本之间有一个空格,就像单行回复一样.此工具通常用于在用户登录后通过230回复代码提供其他响应信息.
| 归档时间: |
|
| 查看次数: |
3402 次 |
| 最近记录: |