Sie können dies versuchen. Ändern Sie das Timeout des Sockets wie in Ihrem Szenario erforderlich! Dieser Code sendet eine Nachricht und wartet dann auf den Empfang von Nachrichten, bis das Timeout erreicht ist!
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();
}
Müssen Sie eine Minute warten oder Daten auf dem Sockel verfügbar sein? Wenn Sie eine ganze Minute warten möchten, würde ich die Schlaf- oder die Schlaffunktion verwenden. Diese werden für die Zeit ablaufen, bevor sie fortfahren. Wenn Sie auf Daten warten, würde ich in die Select-Funktion schauen, die es Ihnen erlaubt, auf Daten zu warten oder einen Zeitraum ablaufen zu lassen, je nachdem, was zuerst eintritt. – Glenn
@Glenn Der Schlaf könnte bis zu einer Minute verschwenden. Was passiert, wenn die Daten nach einer Sekunde eintreffen? Was denkst du gelesene Timeouts sind * für *, genau? – EJP