如何在按下按钮JAVA时正确关闭/启动服务器套接字

时间:2014-11-03 00:38:58

标签: java sockets ftp serversocket

我只是想知道是否有正确的方法来关闭服务器套接字并使用它使用的相同端口再次启动它。我正在编写一个FTP程序,用户可以通过GUI关闭它或启动服务器。现在,我单击按钮启动它,一切正常,再次单击它,它停止,但当尝试启动它时,它会抛出异常。

Address already in use: JVM_Bind

我的代码如下

public static void listen(int port) throws IOException {
    ServerSocket soc = new ServerSocket(port);
    System.out.println("FTP Server Started on Port Number " + port);
    while (online) {
        System.out.println("Waiting for Connection ...");
        transferfile t = new transferfile(soc.accept());
    }
    soc.close();
}

对此问题我感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

ServerSocket soc = new ServerSocket(port);

将此更改为

ServerSocket soc = new ServerSocket();
soc.setReuseAddress(true);
soc.bind(new InetSocketAddress(port));

这告诉TCP允许套接字绑定到已经在使用的端口,可能是旧的TIME_WAIT个状态。