Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理异步响应_Java_Asynchronous_Ftp_Response - Fatal编程技术网

Java 处理异步响应

Java 处理异步响应,java,asynchronous,ftp,response,Java,Asynchronous,Ftp,Response,我正在从头开始构建一个FTP客户机,并且我注意到这种情况并不是立即发生的(这并不奇怪)。为命令获取相应代码的好方法是什么 下面是Filezilla服务器的输出示例。响应代码是每行末尾附近的三位数字 (000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> Connected, sending welcome message... (000057) 23/05/2010 19:43:10 - (not logged in) (12

我正在从头开始构建一个FTP客户机,并且我注意到这种情况并不是立即发生的(这并不奇怪)。为命令获取相应代码的好方法是什么

下面是Filezilla服务器的输出示例。响应代码是每行末尾附近的三位数字

(000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> Connected, sending welcome message...
(000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> 220-FileZilla Server version 0.9.12 beta
(000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> 220-written by Tim Kosse (Tim.Kosse@gmx.de)
(000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> 220 Please visit http://sourceforge.net/projects/filezilla/
(000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> user anonymous
(000057) 23/05/2010 19:43:10 - (not logged in) (127.0.0.1)> 331 Password required for anonymous

在这种特殊情况下,我可能不希望异步实现这一点。除非发送命令和接收响应代码之间的延迟很大(这可能不适用于FTP),并且您可以安全地执行另一个命令,而不知道最后一个命令的结果(您可能无法),否则尝试异步实现这一点就不值得了

我会在发送命令字符串和接收完整响应之间阻止执行,即在伪代码中,您可能会有一个类似以下的执行方法:

  • 通过网络发送命令字符串
  • 使用阻塞网络读取方法或使用非阻塞方法+Thread.sleep(..)等待字符返回(或等待超时,如果您想这样做)
  • 检查字符是否为“响应结束”标记(换行?)
  • 如果不是,返回到2,如果是,返回完整的响应字符串
  • 如果您真的决定走异步路线,那么您应该看看


    希望这能有所帮助。

    的确如此。我还通过Apache的公共网络进行了挖掘。他们使用的是EventObject和EventListener的组合。对于响应,只要有代码并且结果行添加到ArrayList,就会在InputStreamReader上调用readLine()。似乎没有任何异步处理,超时可能由java.net类处理。