1
我正在實施一個客戶端服務器程序,並希望我的客戶端在等待5秒後沒有收到來自服務器的應答,發回相同的數據包...如何知道我們是否收到DatagramPacket的東西?
我是這樣做的,所以請告訴我,如果它的好..
dp = new DatagramPacket(packet , packet.length , host , port);
sock.send(dp);
time = System.currentTimeMillis();
while ((System.currentTimeMillis() - time < 5000) && ack_dp.getLength() == 0) {
sock.receive(ack_dp);
}
if (ack_dp.getLength() == 0)
sock.send(dp);
所以我計劃將等待5秒ACK,如果他不接受任何東西,他會重新發送相同的數據包。我檢查他是否收到包的長度ack或不包含..如果它保持爲0,那麼他沒有收到任何東西..如果它將比0長,然後從while序列中發送一個新的包..( PS:ack_dp是2字節)
這是UDP套接字的情況嗎?我不確定這一點,如果UDP接收套接字'塊,如果他們沒有收到任何東西.. – ZelelB
是的,它阻止。請閱讀精細手冊 - http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html#receive(java.net.DatagramPacket) –
以及如何查看我的數據包是空的還是不是?是否可以使用packet_name.getLength()? – ZelelB