Apache commons tftp 客户端,检测到没有响应的服务器

Apache commons tftp client, detecting not responding server

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

我正在尝试捕获 SocketTimeoutExeption,但函数不会抛出任何东西。我已经用 Wireshark 检查了数据包,我可以看到一个 Write Request 数据包,但是当然没有响应,因为我没有服务器 运行。我如何检查是否没有响应?

TFTP 是一种 UDP 协议。我们没有连接,我们没有错误控制。如果服务器是 运行 并且它响应,它会向您的客户端发送一个您不确定会收到的 UDP 数据报。您无法通过 UDP 获取信息 "datagram is lost"。超时由您的 TFTP 实现管理。

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

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

  • sendFile 和 receiveFile 抛出 IOException。也许 SocketTimeoutException 永远不会被抛出,因为超时过期不是由套接字管理的。