2017-09-14 107 views
0

我目前正在研究一個客戶端服務器應用程序(用於學習目的),我完全停留在如何正確設置DatagramSocket超時以及如何處理異常。Datagramsocket setSoTimeout

服務器端是這樣的:

while (true) { 
    try { 
     serverSocket = new DatagramSocket(25000); 
     running = acceptConnection(serverSocket, ready); 
     serverSocket.setSoTimeout(5000); 

     while (running) { 

      receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      try { 
       serverSocket.receive(receivePacket); 
      } catch (SocketTimeoutException e) { 
       System.out.println("Timed out..."); 
      } 

      receiveMessage = new String(receivePacket.getData(), 0, receivePacket.getLength()); 

      ... 

     } 

    ... 

    } catch (IOException e) { 
     System.err.println(""); 
    } finally { 
     serverSocket.close(); 
    } 

    ... 
} 

什麼,我想在超時的情況下做的是回到主while循環,所以我可以處理其他客戶端。服務器一次只能處理一個客戶端。

我試圖在catch塊中添加running = false;,但它不起作用。

+0

請顯示整個while循環。目前還不清楚捕捉塊位於哪一層。 –

+0

我現在編輯了這篇文章並進行了解釋。很抱歉對於這個誤會。 – ZeppRock

+0

如何在連接時間結束時調用使用引導遞歸的方法 –

回答

1

OP現在沒有現在如何突破while(running)循環回到while(true)循環當套接字接收超時。

在評論中,我告訴他在獲得SocketTimeoutException後使用break關鍵字,他提到這解決了他的問題。