Java绑定exception

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

这有点解释它:

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

有时,您可能会注意到,您尝试重新运行服务器并且bind()失败,声称“地址已在使用中”。 那是什么意思? 好吧,连接的一点sockets仍然在内核中徘徊,它正在占用端口。 你可以等待它清除(一分钟左右),或者在你的程序中添加代码,允许它重用端口,就像这样

(提供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

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

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

谢谢迪帕克