Si può provare questo. Cambia il timeout del socket come richiesto nel tuo scenario! Questo codice invierà un messaggio e quindi attenderà di ricevere messaggi fino al raggiungimento del timeout!
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();
}
È necessario attendere un minuto o dati disponibili sulla presa? Se vuoi aspettare un minuto intero, userei la funzione sleep o usleep. Questi per il periodo di tempo scadranno prima di continuare. Se si è in attesa di dati, esaminerei la funzione di selezione, che consentirà di attendere l'arrivo dei dati o un periodo di tempo scaduto, a seconda dell'evento che si verifica per primo. – Glenn
@Glenn Il sonno potrebbe perdere fino a un minuto. Cosa succede se i dati arrivano dopo un secondo? Cosa pensi che i timeout di lettura siano * per *, esattamente? – EJP