Bạn có thể thử điều này. Thay đổi thời gian chờ của ổ cắm theo yêu cầu trong kịch bản của bạn! Mã này sẽ gửi một tin nhắn và sau đó chờ để nhận tin nhắn cho đến khi hết thời gian chờ!
DatagramSocket s;
try {
s = new DatagramSocket();
byte[] buf = new byte[1000];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
InetAddress hostAddress = InetAddress.getByName("localhost");
String outString = "Say hi"; // message to send
buf = outString.getBytes();
DatagramPacket out = new DatagramPacket(buf, buf.length, hostAddress, 9999);
s.send(out); // send to the server
s.setSoTimeout(1000); // set the timeout in millisecounds.
while(true){ // recieve data until timeout
try {
s.receive(dp);
String rcvd = "rcvd from " + dp.getAddress() + ", " + dp.getPort() + ": "+ new String(dp.getData(), 0, dp.getLength());
System.out.println(rcvd);
}
catch (SocketTimeoutException e) {
// timeout exception.
System.out.println("Timeout reached!!! " + e);
s.close();
}
}
} catch (SocketException e1) {
// TODO Auto-generated catch block
//e1.printStackTrace();
System.out.println("Socket closed " + e1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Bạn có cần đợi một phút hoặc dữ liệu có sẵn trên ổ cắm không? Nếu bạn muốn chờ một phút, tôi sẽ sử dụng chức năng ngủ hoặc ngủ. Những điều này sẽ cho khoảng thời gian hết hạn trước khi tiếp tục. Nếu bạn đang chờ dữ liệu, tôi sẽ xem xét chức năng chọn, điều này sẽ cho phép bạn đợi dữ liệu đến hoặc một khoảng thời gian hết hạn, tùy điều kiện nào đến trước. – Glenn
@Glenn Giấc ngủ có thể lãng phí tới một phút. Nếu dữ liệu đến sau một giây thì sao? Bạn nghĩ thời gian chờ đọc là gì * cho *, một cách tuyệt vời? – EJP