devo generare un timeout di 10 secondi in questa parte del codiceAggiunta timeout DatagramSocket - ricevere()
DatagramPacket getack = new DatagramPacket (entrante, incoming.length);
socket.receive (getack);
ho bisogno di vendita per i pacchetti in ingresso per 10s se riceve un pacchetto prima 10s sarebbe saltate alla if in caso raggiunge 10s sarebbe saltate giù altro e ritrasmettere il pacchetto. È possibile e come potrei fare questo iam abbastanza nuovo a questo.
private static void sendDATA() {
outgoing = new byte[512]; // Empty array
try {
ByteBuffer sDATA = ByteBuffer.allocate(516);
// 512 - 2 byte opcode, 2 byte block #, 512 data
DatagramPacket data = new DatagramPacket(outgoing, outgoing.length, InetAddress.getByName(clientip), clientport);
InputStream fis = new FileInputStream(new File(FILE));
int a;
int block = 1;
while((a = fis.read(outgoing,0,512)) != -1)
{
data.setLength(a);
sDATA.put((byte)3);
sDATA.put((byte)block);
sDATA.put(outgoing);
socket.send(data);
while(true) {
DatagramPacket getack = new DatagramPacket(incoming, incoming.length);
socket.receive(getack);
if(incoming[0] == 3 && incoming[1] == block) {
break;
} else {
socket.send(data);
}
}
}
} catch (Exception e) {
}
}
Hm ho guardato questo, ma mi chiedevo se che funzionerà come volevo dire. Funzionerà nel principio in cui se qualcosa viene ricevuto prima che 10s salti se e se viene raggiunto il timeout, salta in altro? –
Inoltre metto questo prima o dopo getack = DatagramPacket(); –
@kellax Ho apportato una modifica al mio post. Devi impostare il timeout prima di chiamare ricevere. – sebastian