Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java套接字:连接被拒绝异常时重试的最佳方法?_Java_Sockets_Exception Handling - Fatal编程技术网

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(参见)。这将为您节省大量代码。