我目前正在研究客户端 - 服务器应用程序(用于学习目的),我完全坚持如何正确设置DatagramSocket超时以及如何处理异常。
服务器端看起来像这样:
OpenReport
我想在超时的情况下做的是回到主while循环,这样我就可以处理另一个客户端了。该服务器旨在一次只处理一个客户端。
我尝试在catch块中添加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();
}
...
}
,但它不起作用。
答案 0 :(得分:1)
当套接字收到超时时,OP现在没有如何突破while(running)
循环回while(true)
循环。
在评论中,我告诉他在抓住break
之后使用SocketTimeoutException
关键字,他提到这解决了他的问题。