gpt4 book ai didi

java - 如何知道我们是否收到了带有 DatagramPacket 的东西?

转载 作者:行者123 更新时间:2023-11-30 07:20:38 28 4
gpt4 key购买 nike

我正在实现一个客户端-服务器程序,并希望我的客户端在等待 5 秒后没有来自服务器的 ACK-Answer,发回相同的数据包...

我是这样弄的,如果可以的话请告诉我..

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是2bytes)

最佳答案

默认情况下,套接字上的

receive() 会阻塞,因此您的循环在这里没有意义(即使套接字设置为非阻塞,这也是个坏主意TM 在 99.99% 的情况下忙等待)。

使用setSoTimeout() ,并捕获 SocketTimeoutException

关于java - 如何知道我们是否收到了带有 DatagramPacket 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com