Java套接字:连接被拒绝异常时重试的最佳方法?
现在我正在这样做:Java套接字:连接被拒绝异常时重试的最佳方法?,java,sockets,exception-handling,Java,Sockets,Exception Handling,现在我正在这样做: while (true) { try { SocketAddress sockaddr = new InetSocketAddress(ivDestIP, ivDestPort); downloadSock = new Socket(); downloadSock.connect(sockaddr); this.oos = new ObjectOutputStream(downloadSock.getOu
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)
如果远程主机未侦听套接字,则会生成connectionseeded
异常。我在一个单独的线程中运行我的代码,所以我不担心阻塞。鉴于此,我的重试方法是合适的还是有更好的方法
谢谢 尝试在循环中连接到远程服务器是可以的,实际上这是很常见的,但是要确保在每次迭代中都有
线程.sleep(ms)
,否则,服务器主机可能会认为您正在尝试连接。您的方法会用连接请求一个接一个地敲打服务器。您应该在catch
块中包含一个Thread.sleep()
调用(因此只有在您确实需要等待时才会执行),以便在重试之前等待几秒钟。在这种情况下,我通常会在每个请求中使用一个逐渐延长的睡眠时间
可能是服务器快启动了,所以您只想在一秒钟内再试一次。但如果该请求失败,则等待2秒,如果该请求失败,则等待4秒,以此类推
你可能想把等待时间限制在30秒或一分钟之类的时间。定义最大尝试次数可能是明智的,这样你就不会无限期地等待
类似的内容可能会以秒为单位计算下一次延迟:
seconds_to_wait = Math.min(60, Math.pow(2, try_num));
您可能还需要考虑HTTPclipse(参见)。这将为您节省大量代码。