需要一個能夠持續連接多個服務器的代理程序,但它所連接的服務器不太穩定,有時候會關機,為了讓代理程序能夠在連接斷開后自動重新連接,需要一個循環,當Socket異常時自動重新連接。
需要解決幾個問題:
1、當手動停止代理程序時不應該再自動重連。
2、當連續多次連接均失敗,可能是服務器已關機,不應該再不斷重復下去,要休息一段時間再連。
3、如果連接成功后持續一定的時間不用再重連,就不叫“連續連接”。
解決方法:
1、設置一個while循環,判斷條件為是否已經設置手動停止標志,若是,則不再循環,退出監聽線程。
2、設置一個連接計數,當連接次數達到某個數目時,讓線程休息一段時間,同時應該把連接次數清零。
3、設置一個定時器,設定它在一定的時間之后把連接計數器清零,每次開始連接時把上次的定時器取消掉,并建立一個新的定時器。這樣一來,假如兩次連接的間隔小于定時時間,則上次的定時器還沒開始執行清零任務就已經被取消掉,連接計數器能夠正常進行;假如某次連接成功了,也就是說連接的持續時間已經超過了定時時間,則定時器的任務得以執行,計數器清零,下次重連的時候會從零開始計數。