我编写了一个程序,使两个线程都包含监听两个不同端口并在while循环中等待ServerSocketaccept()对象,在运行它之后,启动这些线程之一不会导致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)


我曾两次使用不同的端口,但没有用,请帮助我解决此问题。我感谢您的帮助。

最佳答案

我曾两次使用不同的端口,但没有用,请帮助我解决此问题。


如果最近使用端口,即使当前没有进程在使用SO_REUSEADDR(使用socket.setReuseAddress(true)),设置失败也会导致绑定失败。

另一种可能是代码中的逻辑错误,导致该逻辑错误为两个线程使用相同的端口。在这种情况下,您应该添加一条跟踪,以打印将要绑定的端口。

关于java - 如何在没有Java中的java.net.BindException的情况下监听localhost中的两个端口?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30417401/

10-10 09:31
查看更多