Java 套接字-地址已在空闲套接字上使用-但仅在不处于调试模式时使用

Java 套接字-地址已在空闲套接字上使用-但仅在不处于调试模式时使用,java,exception,serversocket,debug-mode,Java,Exception,Serversocket,Debug Mode,我编写了一个java程序,它正在套接字上侦听 ... int port = getPort(); ServerSocket server = new ServerSocket(port); server.accept() ... 使用Java1.4、5和6,它可以在十年左右的时间内正常工作。 但对于Java 7或8,构造函数总是失败,出现以下绑定异常: java.net.BindException: Address already in use: JVM_Bind at java.ne

我编写了一个java程序,它正在套接字上侦听

...
int port = getPort();
ServerSocket server = new ServerSocket(port);
server.accept()
...
使用Java1.4、5和6,它可以在十年左右的时间内正常工作。 但对于Java 7或8,构造函数总是失败,出现以下绑定异常:

java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:382)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
    at java.net.ServerSocket.bind(ServerSocket.java:375)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:128)
但我不想在任何情况下使用它:)

在我发现这一点之后,我已经从tomcat启动文件中删除了调试选项。令人惊讶的是,Tomcat7在没有调试选项的情况下启动Java7/8时,在创建HTTP侦听器时也会遇到同样的问题。但是Tomcat 7需要Java 7或更高版本。
我确信Java7/8和Tomcat7在像套接字通信这样重要的事情上都没有出现bug
那么我做错了什么

我已经用Windows7 Professional SP1 64位、JDK7 32/64位和JDK8 64位进行了测试

更新

在另一台具有相同操作系统和jdk的机器上,此问题不会发生。

您是否已检查以确保不存在其他可能使用该端口的现有Java进程?我注意到,有时当我在不关闭套接字的情况下终止Java进程(即使用任务管理器)时,套接字仍然是有边界的。是的,我先检查了。此外,如果端口号真的在使用中,解决方法或设置调试选项将不起作用。NB默认为零套接字超时。你不需要设置它。
...
int port = getPort();
try {
     server = new ServerSocket(port);
} catch(BindException e){
    server = new ServerSocket(port);
}
server.setSoTimeout(0);
server.accept()
...
<br>