java - 简单的开放式套接字很少挂起

标签 java sockets network-programming

我有一段相当简单的代码卡在 java 中。挂起很少见。大概每 1000 次执行一次。在设备上循环运行它似乎不会重现问题。

long timeout = 10000;
long endTime = System.currentTimeMillis() + timeout + 5000;
Socket pingSocket = null;
String host = "host";
String port = "22";

do {

    try {
        pingSocket = new Socket();
        pingSocket.bind(null);
        pingSocket.connect(new InetSocketAddress(host, port), 5000);
        if (pingSocket.isConnected()) {
            pingSocket.close();
            return true;
        }
        pingSocket.close();
    }
    catch (UnknownHostException e) {
        throw e;
    }
    catch (IOException e) {
        // All other errors are subclassed from IOException, and i want
        // to ignore till after my spin period.
    }

    try {
        Thread.sleep(SPIN_SLEEP_DELAY);
    }
    catch (InterruptedException e) {
        return false;
    }

} while (System.currentTimeMillis() <= endTime);

由于它在生产中很少发生,因此很难缩小导致问题的范围。我目前正在检测代码,以便我们的产品的下一个版本在发生这种情况时会有更多信息,但我想我会问是否有人以前只看到过简单的 bind/connect/isConnected/close 挂起?

谢谢!

最佳答案

您是否在挂起期间生成了 Java 线程转储?这将告诉您代码中发生挂起的位置。

关于java - 简单的开放式套接字很少挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120265/

相关文章:

java - JDBC PL/SQL 上一行 (LAG) 仅返回当前值

java - 数字格式问题,新手项目

javascript - 错误: socket hang up using https

php - 如何从 Objective-C/iOS 中恢复 PHP $_SESSION 变量?

php - 如何通过stream_get_contents()连续监听多个TCP流?

java - Param.getValue.get() 不起作用

java - 如何将 .GIF 文件保存到图库中?

c 套接字文件传输,服务器不打开现有文件

c++ - 简单的套接字程序偶尔会失败

java - Android 应用程序中出现奇怪的 NetworkOnMainThreadException?