java - 如何在有限的时间内(超时)从 DatagramSocket 中读取数据 block ?

标签 java sockets network-programming datagram

我正在运行网络数据包传输丢失的模拟。我的服务器应用程序有时不会将数据发送回我的客户端。

在我的客户端中,我每秒钟向服务器运行 10 次 ping。但是,在我的服务器没有发回任何东西的情况下,我的客户端将等待直到收到下一个数据包。如果我没有从服务器获取任何信息,我该如何继续下一次迭代?

//attempt to read from server
    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
    receivePacket.getData();

//client blocks on this line until something is received from server
    clientSocket.receive(receivePacket);
    String receivedFromServer = new String(receivePacket.getData());
    System.out.println("FROM SERVER:" + receivedFromServer);

最佳答案

您需要设置一个 timeout :

clientSocket.setSoTimeout(TIMEOUT_IN_MILLISECONDS)

关于java - 如何在有限的时间内(超时)从 DatagramSocket 中读取数据 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533730/

相关文章:

java - Spring MVC 转换服务默认值

c - 将 STDIN 重定向到套接字并将套接字重定向到 STDOUT

c++ - 附加套接字字符数组

c++ - 套接字客户端使用服务器接受的连接发送

java - 使用java在网站上实现家长控制

java - Java 中的egrep 失败,而shell 中成功

java - 在 Android 中,如何下载网页的 HTML?

java - 可以在 switch 语句中使用 throw 代替 break 吗?

c# - 在 C# 中处理 TCP 服务器中的用户超时

c++ - 客户端关闭后 accept() 不阻塞(使用 Ctrl+C)错误 10093