- 我使用端口 9000 启动使用 Jetty 服务器的应用程序。
- 然后我用 Ctrl-C 关闭我的应用程序
- 我用“netstat -a”检查,发现端口 9000 不再被使用。
- 我重新启动我的应用程序并获得:
[ERROR,9/19 15:31:08] java.net.BindException: Only one usage of each socket address (protocol/network address/port) is normally permitted [TRACE,9/19 15:31:08] java.net.BindException: Only one usage of each socket address (protocol/network address/port) is normally permitted [TRACE,9/19 15:31:08] at java.net.PlainSocketImpl.convertSocketExceptionToIOException(PlainSocketImpl.java:75) [TRACE,9/19 15:31:08] at sun.nio.ch.Net.bind(Net.java:101) [TRACE,9/19 15:31:08] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126) [TRACE,9/19 15:31:08] at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:77) [TRACE,9/19 15:31:08] at org.mortbay.jetty.nio.BlockingChannelConnector.open(BlockingChannelConnector.java:73) [TRACE,9/19 15:31:08] at org.mortbay.jetty.AbstractConnector.doStart(AbstractConnector.java:285) [TRACE,9/19 15:31:08] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) [TRACE,9/19 15:31:08] at org.mortbay.jetty.Server.doStart(Server.java:233) [TRACE,9/19 15:31:08] at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) [TRACE,9/19 15:31:08] at ...
这是一个Java错误吗?我可以在启动 Jetty 服务器之前以某种方式避免它吗?
编辑 #1这是我们创建 BlockingChannelConnector 的代码,注意“setReuseAddress(true)”:
connector.setReuseAddress( true ); connector.setPort( port ); connector.setStatsOn( true ); connector.setMaxIdleTime( 30000 ); connector.setLowResourceMaxIdleTime( 30000 ); connector.setAcceptQueueSize( maxRequests ); connector.setName( "Blocking-IO Connector, bound to host " + connector.getHost() );
会不会和空闲时间有关?
编辑#2下一个可能有帮助也可能没有帮助的难题:在调试模式 (Eclipse) 下运行应用程序时,服务器启动时没有问题!!!但是在运行模式下运行应用程序或作为构建的 jar 文件时,上述问题会重复出现。威士忌探戈狐步舞?
编辑#3(4天后) -仍然有问题。有什么想法吗?