如果打开,强制关闭套接字

时间:2016-05-05 16:13:02

标签: java android sockets

在Android应用中,有时应用会被强制关闭。但是,服务器套接字仍在使用中。所以,下次我启动应用程序时,它会给我错误

  

java.net.BindException:bind failed:EADDRINUSE(Address已经在   使用)

启动套接字的代码是

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

我希望确保,当我重新启动时..它应该重新使用套接字。

1 个答案:

答案 0 :(得分:3)

我猜你的应用程序因为一个不受控制的异常而被迫关闭。理想情况下,您应该修复任何问题,迫使您的应用关闭,而不是搜索解决方法。

在任何情况下,您都应该始终使用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权限,则无法强制关闭属于另一个进程的现有套接字。