java - 数据报套接字 setSoTimeout

标签 java sockets server timeout try-catch

我目前正在开发一个客户端-服务器应用程序(出于学习目的),并且我完全陷入如何正确设置 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 block 中添加 running = false; 但没有成功。

最佳答案

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

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

关于java - 数据报套接字 setSoTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226307/

相关文章:

linux - SO_REUSEPORT 套接字服务器

javascript - myfonts 如何跟踪其 webfonts 的页面浏览量?

c - 在 C 中管理具有 2 个客户端的服务器中的多个线程

java - 测试类不认为我的 ArrayList 是 ArrayList

Java 点,getX() 和 point.x 之间的区别

java - 线程启动后服务器/客户端程序停止工作

python - Django 应用程序消耗服务器中的内存

java - hibernate 嵌套异常

java - 如何模拟 ENUM 类中的方法?

java - 套接字 ObjectOutpuStream ObjectInputStream