Java绑定异常

时间:2009-05-11 05:49:56

标签: java exception sockets bind

什么会导致TCP套接字抛出“java.net.BindException:Address in in use”,即使重用地址设置为true?仅当应用程序快速重新启动时才会出现这种情况。在CentOS 5 Linux OS上运行。

3 个答案:

答案 0 :(得分:3)

这有点解释:

http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html#bind

  

有时候,你可能会注意到,你试试   重新运行服务器并且bind()失败,   声称“地址已在使用中”。   那是什么意思?好吧,有点   已连接的套接字的位是   仍然在内核中闲逛,   它正在占据港口。您可以   或等待它清除(一分钟   或者),或者在程序中添加代码   允许它重用端口,比如   此

     

(提供C代码)

基本上,在C中,您调用一个名为setsockopt()的函数,其中一个参数称为SO_REUSEADDR,它允许您重用该端口。

我在google上发现了一些简短的链接,这些链接应该让你开始弄清楚如何在Java中设置等效选项:

http://java.sun.com/j2se/1.4.2/docs/guide/net/socketOpt.html

http://java.sun.com/j2se/1.4.2/docs/api/java/net/SocketOptions.html

答案 1 :(得分:2)

如果您说的是正确的,您应该能够在循环中捕获此异常并在几秒钟后重试。 (你不应该这样做,但我听说过CentOS的一些奇怪的事情)

答案 2 :(得分:1)

发生Java绑定异常如果您的某个端口或InetAddress已被使用,并且您想再次使用它。因此,如果运行,释放端口会停止程序。 否则改变端口

由于 迪帕克