Некоторые вопросы, связанные с "Адрес используется: JVM_Bind" - PullRequest
0 голосов
/ 26 мая 2011

Я пишу сокет-программы на Java и иногда получаю эту ошибку.У меня есть несколько вопросов:

1) Я использую Eclipse для запуска приложений сокетов и, наконец, нажимаю «завершить», но иногда все равно получаю эту ошибку.Почему?

2) Есть ли способ программно закрыть порт? Примерно так:

if(isPortOpen(portNumber)) {
   closePort(portNumber);
}
//// Run my app here

3) Есть ли способчтобы избежать этой ошибки (в программировании или ОС)?

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Опция сокета SO_REUSEADDR может помочь повторно использовать порт, который ранее использовался (программа была остановлена ​​несколько секунд назад).

Просто создайте неподключенный сокет, используйте

socket.setReuseAddress(true);

перед подключением сокета, а затем подключите его.

См. javadoc и этот пост SO

1 голос
/ 26 мая 2011
  1. В идеале, когда приложение убито, открытые порты должны быть закрыты.
  2. Если у вас есть объект сокета для этого порта, то socket.close () должен закрыть порт.
  3. Но в Java вы не можете закрыть порт, открытый другим приложением
  4. Вы можете использовать TCPView для закрытия невыпущенных портов
...