现在我正在这样做:
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));