有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java强制关闭打开的socket

在安卓应用程序中,有时应用程序会被强制关闭。但是,服务器socket仍在使用中。所以,下次我启动应用程序时,它会告诉我错误

java.net.BindException: bind failed: EADDRINUSE (Address already in use)

我启动socket的代码是

ServerSocket serverSocket;
            serverSocket = new ServerSocket(); // <-- create an unbound socket first
            serverSocket.setReuseAddress(true);
            serverSocket.bind(new InetSocketAddress(SERVER_PORT))

我希望确保,当我的电脑重新启动时。。它应该重新使用插座


共 (1) 个答案

  1. # 1 楼答案

    我猜你的应用程序是因为一个无法控制的异常而被迫关闭的。理想情况下,你应该解决任何迫使你的应用关闭的问题,而不是寻找解决办法

    在任何情况下,都应该始终使用finally块关闭资源,这样即使出现异常,它们也会关闭

    ServerSocket serverSocket = null;
    try {
        serverSocket = new ServerSocket(); // <  create an unbound socket first
        serverSocket.bind(new InetSocketAddress(SERVER_PORT));
        // Do your server stuff
    } finally {
        if (serverSocket != null) {
            serverSocket.close();
        }
    }
    

    或者更好,如果可能的话,使用try with resources(Java 7+):

    ServerSocket serverSocket = null;
    try (ServerSocket serverSocket = new ServerSocket();) {
        serverSocket.bind(new InetSocketAddress(SERVER_PORT));
        // Do your server stuff
    }
    

    请注意,在没有root权限的情况下,无法强制关闭属于另一个进程的现有套接字