2016-12-24 64 views
-1

我正在處理有關SMPP協議的項目。它無限地監聽服務器並接受套接字。接收套接字後,它會創建一個處理程序,它接收數據並根據SMPP協議對其進行處理。經過一段時間(1或2周)後,它停止接收插座。它不會拋出任何異常,只是等待在線*。我不知道有什麼問題,我該如何解決。注意套接字數不超過30個。所以我們沒有關於活套接字數限制的問題。 並注意創建之前的其他套接字是活着的並且正在工作.App從這些套接字接收數據並進行處理:接收短信並從這些套接字發送短信。重新啓動應用程序後,它正在工作。我認爲這不是解決方案。接收Socket在某個時間後突然停止

private void process() { 
    try { 
     //line *.waiting for receiving new socket. Problem is on this point 
     Socket socket = serverSocket.accept(); 
     //creating a handler that recieve data and process it according to SMPP protocol 
     StandardConnectionHandler sch = new StandardConnectionHandler(socket); 
     new Thread(sch).start(); 
     smsc.getConnectionHandlers().add(sch); 
    } catch (Exception ex) { 
     logger.log(Level.SEVERE, "exception in accepting a connection", ex); 
    } finally { 
     process();//if it is done.recieved a new socket call back again 
     //it is infinite recursive procedure 
    } 
} 
+0

好吧,1-2周我認爲它的正常行爲。那麼一些'看門狗',關閉時應該再次啓動套接字的服務呢? –

+0

套接字沒有關閉它正在工作。我注意到,所有創建之前的套接字都活着並且正在工作。如果套接字已關閉,則連接到應用程序的所有客戶端也必須關閉。問題是接收新的套接字。它只是在等待爲它。沒有例外沒有錯誤 – Sarkhan

+0

@MaximShoustin我寫了我的最新評論。請閱讀它。沒有任何關閉,關閉問題 – Sarkhan

回答

-1

您沒有發佈完整的代碼和服務器套接字初始化。儘管如此,我認爲你的問題可能與你沒有正確關閉所有的流有關。

+0

我不斷調試所有套接字,每個客戶端都有privilidge來連接一次。我再次注意到沒有錯誤。在你說我應該得到一個錯誤 – Sarkhan

+0

遞歸調用是否有任何理由,或者你可以切換到一個標準的同時循環 – user2430343

+0

我也可以在while(true)中做到。遞歸過程沒有任何特殊原因。遞歸版本中可能存在什麼問題? – Sarkhan