【问题标题】:Datagramsocket setSoTimeout数据报套接字 setSoTimeout
【发布时间】: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


【解决方案1】:

OP 现在没有在套接字接收超时时如何跳出while(running) 循环回到while(true) 循环。

在 cmets 中,我告诉他在捕获 SocketTimeoutException 后使用 break 关键字,他说这解决了他的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多