我正在寫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");
}
}
}
但上面顯示一個糟糕的編碼技能,而不是專業的。
如何以專業的方式爲端口編寫重試策略,以便服務器可以在該端口上偵聽?
也許把它包裝在一個'while-loop'中,檢查一個'boolean'類型變量,它告訴端口是否空閒?在創建對象之後:'portIsFree = true',並且再次嘗試的條件是'portIsFree == false' – Novak 2013-05-06 09:09:55
@GuyDavid檢查端口是否空閒的方法是什麼? – devsda 2013-05-06 09:11:45
'ServerSocket'如果未能使用給定的端口,將會拋出異常,所以它不會在之後執行任何代碼 - 它會通過設置'portIsFree = true;'的行並跳轉到catch部分。循環將繼續,因爲'portIsFree'仍然設置爲'false'。 – Novak 2013-05-06 09:14:20