2013-05-06 62 views
0

我正在写HTTP WEB服务器代码。意思就是,我必须对使用端口的重试策略进行编码,以便在该端口服务器上可以监听客户端的请求。如何编码服务器端的端口重试策略来监听客户端请求?

正常码:

serversocket = new ServerSocket(ServerSettings.port); 

它抛出异常,如果ServerSettings.port是不是免费的。

现在,我想添加重试策略,如果ServerSettings.port不是免费的,请尝试其他端口。对于我写的一个代码,代码是S-如下,

更新的代码:

try { 
      serversocket = new ServerSocket(ServerSettings.port); 
     } catch (IOException io) { 
      try { 
       ServerSettings.port += 505; 
       serversocket = new ServerSocket(ServerSettings.port); 
      } catch (IOException io1) { 
       try { 
        ServerSettings.port += 505; 
        serversocket = new ServerSocket(ServerSettings.port); 
       } catch (IOException io2) { 
        log.info(new Date() + "Problem occurs in binding port"); 
       } 
      } 
     } 

但上面显示一个糟糕的编码技能,而不是专业的。

如何以专业的方式为端口编写重试策略,以便服务器可以在该端口上侦听?

+0

也许把它包装在一个'while-loop'中,检查一个'boolean'类型变量,它告诉端口是否空闲?在创建对象之后:'portIsFree = true',并且再次尝试的条件是'portIsFree == false' – Novak 2013-05-06 09:09:55

+0

@GuyDavid检查端口是否空闲的方法是什么? – devsda 2013-05-06 09:11:45

+0

'ServerSocket'如果未能使用给定的端口,将会抛出异常,所以它不会在之后执行任何代码 - 它会通过设置'portIsFree = true;'的行并跳转到catch部分。循环将继续,因为'portIsFree'仍然设置为'false'。 – Novak 2013-05-06 09:14:20

回答

1

从逻辑上讲,我认为这会工作(纠正我,如果有任何语法拼写错误):

ServerSocket serversocket; 
boolean foundPort = false; 

while (!foundPort) 
{ 
    try { 
      serversocket = new ServerSocket(ServerSettings.port); // If this fails, it will jump to the `catch` block, without executing the next line 
      foundPort = true; 
    } 
    catch (IOException io) { 
      ServerSettings.port += 505; 
    } 
} 

你可以把它包在一个函数,而不是foundPort = true;,你将返回Socket对象。

+0

非常感谢:)我还有一个问题,请帮助我,并链接如下,http://stackoverflow.com/questions/16395396/how-to-add-feature-of-shutdown-in -http-web服务器/ 16395478?noredirect = 1#16395478 – devsda 2013-05-06 09:32:36

相关问题