Java 绑定异常

发布于 2024-07-19 05:57:14 字数 121 浏览 4 评论 0原文

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

What would cause a TCP socket to throw "java.net.BindException: Address already in use" even when reuse address is set to true? This only occurs if the application is quickly restarted. Running on CentOS 5 linux OS.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不甘平庸 2024-07-26 05:57:14

这有点解释它:

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

This kinda explains it:

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

Sometimes, you might notice, you try
to rerun a server and bind() fails,
claiming "Address already in use."
What does that mean? Well, a little
bit of a socket that was connected is
still hanging around in the kernel,
and it's hogging the port. You can
either wait for it to clear (a minute
or so), or add code to your program
allowing it to reuse the port, like
this

(provides C code)

Basically, in C, you call a function called setsockopt(), and one of the parameters is called SO_REUSEADDR, which lets you reuse that port.

I found some brief links on google which should get you started figuring out how to set the equivalent option in 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

葵雨 2024-07-26 05:57:14

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

If what you say is correct you should be able to trap this exception in a loop and try again after a few seconds. (You shouldn't have to do this, but I have heard of a few odd things about CentOS)

合久必婚 2024-07-26 05:57:14

如果您的端口或 InetAddress 已被使用并且您想再次使用,则会发生 Java Bind 异常。 因此,释放端口停止程序(如果正在运行)。
否则更改端口

谢谢
迪帕克

Java Bind Exception occurs If either of your port or InetAddress is already used and you want to use once again. So free up the port stop the program if running.
otherwise change the port

Thanks
Deepak

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文