2017-09-14 38 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关键字,他提到这解决了他的问题。