[Java] Serversocket BindException

Pagina: 1
Acties:

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Hoi allemaal,

Ik ben hier al de hele dag mee bezig en ik kom er maar niet uit.
Ik heb een Java app die een Thread aanmaakt die luistert op een bepaalde TCP/IP port (die door de user in te stellen is) naar connecties.

De gebruiker heeft ook de mogelijkheid om de port te veranderen. Echter dan dient de Listener wel opnieuw opgestart te worden.

Dit gaat goed tenzij de user dezelfde port opgeeft.
Dan krijg ik dus een BindException. Dat zou logisch zijn aangezien er al een Listener draait op die port en de port in use zou zijn.

Echter voordat ik een nieuwe serversocket aanmaak close ik de huidige eerst. Dan lijkt mij dat hij de socket weer vrij zou moeten geven, maar ik blijf die error dus krijgen :)

Ter illustratie, deze code gebruik ik in de thread:
code:
1
2
3
4
5
6
7
if (serversocket != null)
{
  serversocket.close();
  serversocket = null;
}

serversocket = new ServerSocket(intListenPort);

Ik print overigens de waarde van intListenPort voordat ik de socket aanmaak en die is correct.

Iemand die me kan helpen :?

It’s nice to be important but it’s more important to be nice


  • BitProcessor
  • Registratie: Februari 2001
  • Laatst online: 30-08 23:59
Onder C in linux is het zo dat je van je socket een bepaalde optie moet instellen omdat anders de kernel nog een tijdje de port als used zet.

Misschien is dit ook zo'n geval ?
Staat het niet in de API :?

"I think there is a world market for maybe five computers" - Thomas Watson, chairman of IBM, 1943


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Stom foutje gemaakt.
Op een gegeven moment doe je een

socket = serversocket.accept();

Als je een connectie accepteert je moet uiteraard ook de nog openstaande sockets closen voordat je weer een nieuwe serversocket aanmaakt.

Dus even een socket.close() toegevoegd en het werkt :)

It’s nice to be important but it’s more important to be nice