处理异步响应

时间:2010-05-23 17:44:17

标签: java asynchronous ftp response

我正在从头开始构建一个FTP客户端,我注意到response codes不是立即的(这并不奇怪)。将相应的代码输入命令会有什么好方法?

以下是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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 通过网络发送命令字符串
  2. 使用阻塞网络读取方法或使用非阻塞方法+ Thread.sleep(..)
  3. 等待某个字符返回(或超时,如果您想这样做)
  4. 检查字符是否为“响应结束”标记(换行符?)
  5. 如果没有,请返回2,如果是,则返回完整的响应字符串
  6. 如果你真的决心走下异步路线,你应该看一下Callback pattern

    希望这有帮助。

相关问题