2014-11-03 4 views
0

Я просто хочу знать, есть ли правильный способ закрыть серверный сокет и запустить его снова с использованием того же самого порта, который он использовал. Я пишу программу FTP, и пользователь может закрыть ее или запустить сервер с помощью графического интерфейса. Теперь я нажимаю кнопку, чтобы запустить его, все работает нормально, снова нажимает на него, останавливается, но при попытке запустить его оно выдает исключение.Как правильно закрыть/запустить серверный сокет при нажатии кнопки JAVA

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
ServerSocket soc = new ServerSocket(port); 

Изменить это

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

Это говорит TCP, чтобы сокет для привязки к порту, который уже используется, вероятно, старые TIME_WAIT государств.

+0

Perfect. Это сработало. Спасибо. – ditmark12

Смежные вопросы