什么会导致TCP套接字抛出“java.net.BindException:Address in in use”,即使重用地址设置为true?仅当应用程序快速重新启动时才会出现这种情况。在CentOS 5 Linux OS上运行。
答案 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已被使用,并且您想再次使用它。因此,如果运行,释放端口会停止程序。 否则改变端口
由于 迪帕克