Apache公共tftp客户端,检测不响应服务器

时间:2015-02-03 14:24:54

标签: java client tftp server-response

我使用org.apache.commons.net.tftp.TFTPClient在Java中编写了一个简单的TFTP客户端。作为测试的服务器我使用tftpd64并且在它运行时,一切正常。但是当没有任何服务器在运行时,函数sendFile()receiveFile()将返回。

我正试图抓住SocketTimeoutExeption,但函数不会抛出任何东西。我用Wireshark检查了数据包,我可以看到一个Write Request数据包,但当然没有响应,因为我没有运行服务器。我如何检查,没有回应?

1 个答案:

答案 0 :(得分:0)

TFTP是UDP协议。我们没有连接,我们没有错误控制。如果服务器正在运行并且它响应,它会向您的客户端发送您不确定接收的UDP数据报。您无法获得信息"数据报丢失"用UDP。超时由您的TFTP实施管理。

根据commons apache code和apache TFTPClient doc,您已经有了超时管理。

  • setDefaultTimeout(int timeout):设置打开套接字时使用的默认超时时间(毫秒)。
  • setSoTimeout(int timeout):设置当前打开的连接的超时时间(毫秒)。
  • setMaxTimeouts(int numTimeouts):设置在结束尝试重试接收和失败之前,在receiveFile()或sendFile()操作期间允许接收尝试超时的最大次数。

    < / LI>
  • sendFile和receiveFile抛出IOException。也许永远不会抛出SocketTimeoutException,因为超时过期不是由socket管理的。