【发布时间】:2017-09-14 18:47:55
【问题描述】:
我目前正在开发一个客户端-服务器应用程序(出于学习目的),我完全不知道如何正确设置 DatagramSocket 超时以及如何处理异常。
服务器端如下所示:
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;,但没有成功。
【问题讨论】:
-
请显示整个while循环。目前尚不清楚捕获块位于哪一层。
-
我现在已经编辑了帖子并进行了解释。很抱歉造成误解。
-
连接超时时如何使用引导递归调用方法
-
要跳出
while(running)循环回到while(true)循环,你应该在捕获超时异常后使用关键字break。 -
您不需要在外循环内不断重新创建
DatagramSocket。
标签: java sockets server timeout try-catch