现在我正在这样做:

while (true) {
    try {
        SocketAddress sockaddr = new InetSocketAddress(ivDestIP, ivDestPort);
        downloadSock = new Socket();
        downloadSock.connect(sockaddr);
        this.oos = new ObjectOutputStream(downloadSock.getOutputStream());
        this.ois = new ObjectInputStream(downloadSock.getInputStream());
        break;
    } catch (Exception e) {}
}

如果远程主机未在套接字上监听,则downloadSock.connect(sockaddr)将生成ConnectionRefused异常。我在一个单独的线程中运行我的代码,因此我不必担心阻塞。鉴于此,我的重试方法合适还是有更好的方法???

谢谢!

最佳答案

在这种情况下,我通常会在每个请求中使用逐渐延长的 sleep 时间。

服务器可能已经快用完了,所以您只想在一秒钟后再试一次。但是,如果该请求失败,请等待2秒,但是如果该请求失败,请等待4秒,依此类推。

可能是您希望将等待时间限制为30秒或一分钟或类似的时间。定义最大尝试次数可能是明智的,这样您就不会无限期地等待。

这样的事情可能会以秒为单位计算您的下一个延迟:

seconds_to_wait = Math.min(60, Math.pow(2, try_num));

10-05 23:03