我使用org.apache.commons.net.tftp.TFTPClient
在Java中编写了一个简单的TFTP客户端。作为测试的服务器我使用tftpd64并且在它运行时,一切正常。但是当没有任何服务器在运行时,函数sendFile()
和receiveFile()
将返回。
我正试图抓住SocketTimeoutExeption
,但函数不会抛出任何东西。我用Wireshark检查了数据包,我可以看到一个Write Request数据包,但当然没有响应,因为我没有运行服务器。我如何检查,没有回应?
答案 0 :(得分:0)
TFTP是UDP协议。我们没有连接,我们没有错误控制。如果服务器正在运行并且它响应,它会向您的客户端发送您不确定接收的UDP数据报。您无法获得信息"数据报丢失"用UDP。超时由您的TFTP实施管理。
根据commons apache code和apache TFTPClient doc,您已经有了超时管理。
setMaxTimeouts(int numTimeouts):设置在结束尝试重试接收和失败之前,在receiveFile()或sendFile()操作期间允许接收尝试超时的最大次数。
< / LI>sendFile和receiveFile抛出IOException。也许永远不会抛出SocketTimeoutException,因为超时过期不是由socket管理的。