我编写了一个程序,使两个线程都包含 ServerSocket
对象,监听两个不同的端口并在 while 循环中等待 accept()
,运行该程序后,启动其中一个线程不会导致 Exception
,但是当它启动另一个线程时,我得到 java.net.BindException
如下:
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at ListeningThread.run(ListeningThread.java:18)
我多次使用不同的端口,但没有成功,请帮我解决这个问题。感谢您的帮助。
最佳答案
I used different ports for both many times, but didn't work, please help me fix this problem.
如果最近使用过该端口,则无法设置 SO_REUSEADDR(使用 socket.setReuseAddress(true)
)可能会导致绑定(bind)失败,即使当前没有进程正在使用它。
另一种可能性是代码中的逻辑错误导致它为两个线程使用相同的端口。在这种情况下,您应该添加一条打印要绑定(bind)的端口的跟踪。
关于java - 如何在没有Java中的java.net.BindException的情况下监听本地主机中的两个端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417401/