मैं कोड के इस हिस्से पर एक 10 सेकंड का समय समाप्त बनाने की जरूरतDatagramSocket को टाइमआउट जोड़ना - (प्राप्त)
datagrampacket getack = नए datagrampacket (आवक, incoming.length);
सॉकेट.रेसीव (गेटैक);
मैं अगर यह 10s से पहले एक पैकेट प्राप्त करता 10s के लिए आने वाले पैकेट के लिए सूचीबद्ध करने के लिए इसकी आवश्यकता है यह करने के लिए नीचे छोड़ होता अगर बयान मामले में यह यह किसी के लिए नीचे कूद और पैकेट को पुन: भेजने होगा 10s तक पहुँचता है। क्या यह संभव है और मैं यह कैसे कर सकता हूं Iam इस पर बहुत नया है।
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