如何在没有Java中的java.net.BindException的情况下监听localhost中的两个端口?

时间:2015-05-23 20:43:55

标签: java multithreading serversocket

我编写了一个程序,它使两个包含ServerSocket对象的线程监听两个不同的端口,并在while循环中等待accept(),在我运行它之后,启动其中一个线程会导致no { {1}},但是当它开始另一个时,我得到Exception如下:

java.net.BindException

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

2 个答案:

答案 0 :(得分:0)

  

我多次使用不同的端口,但没有用,请帮我解决这个问题。

如果最近一次使用该端口,则无法设置SO_REUSEADDR(使用socket.setReuseAddress(true))会导致绑定失败,即使当前没有进程正在使用它。

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

答案 1 :(得分:0)

Thanks for your replies, I fixed the the problem just by adding Thread.sleep() between starting the two threads, even postponing by (1 millisecond), I still can't figure out what was the problem.

new ListeningThread(this, 6666).start();
Thread.sleep(1);
new ListeningThread(this, 7777).start();