我需要在這部分代碼創建10秒的超時添加超時的DatagramSocket - 接收()
DatagramPacket的getack =新的DatagramPacket(傳入,incoming.length);
socket.receive(getack);
我需要它,如果它10S之前接收到數據包爲10秒進入的數據包上市if語句的情況下,達到10秒它會跳下到別的,然後重新發送數據包,將跳過了。這是可能的嗎?我怎麼能做到這一點我很新。
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) {
}
}
嗯我看着這一點,但我不知道這是否會工作像我的意思。這將工作的原則,如果10秒前收到的東西跳到如果,如果超時已達到然後跳到其他? –
另外,我也把這個之前或之後getack = DatagramPacket(); –
@kellax我編輯了我的文章。您必須在調用接收之前設置超時。 – sebastian