绑定到同一端口时,java ServerSocket不会抛出IOException

时间:2013-01-09 05:09:19

标签: java sockets

我的代码存在问题,如下所示。 代码:

int port = 14205; // begin port
// Try to bind socket on any port<br>

while(true){

try {
     InetSocketAddress isa = new InetSocketAddress(port);
    Log.logFile("bind port = " + port);

        // ss is a ServerSocket object
    ss.bind( isa );

    break;
} catch (IOException e) {
    Log.logFile("exception");
    port++;
}
 }

我在同一台机器(win7x64)上同时在JVM 1.7和JVM 1.6上运行此代码。使用CurrPorts工具调查我们正在监听的端口。 结果:我们正在侦听同一个端口14207。 我认为JVM在运行此代码的第二个实例时必须抛出IOException,但它没有。

我的代码出了什么问题? 请帮忙。 注意:我必须在这个senario(2个JVM)中运行。

3 个答案:

答案 0 :(得分:1)

break;会破坏你的while循环并退出while循环,而不会有关于捕获exception的问题。但是,当您尝试捕获异常时,需要将异常消息打印到日志文件。

替换此

Log.logFile("exception");

用这个

Log.logFile("exception"+ e.toString());

答案 1 :(得分:1)

第一次绑定后你的循环中断了。

答案 2 :(得分:0)

OK!我会回答我的问题。 这是JVM错误。有关更多信息,请参阅Oracle bugbase: http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=71f70e71266a551ce53dcda4a050c?bug_id=7174699