java中的setsotimeout

时间:2011-02-13 16:06:35

标签: java sockets network-programming udp

我正在尝试通过DatagramSocket发送数据,并希望这样做,如果发送的数据已经超过其确认的超时,那么它应该重新发送。

我们可以使用DatagramSocket.SetSoTimeout选项吗?如果是的话,我怎么办?

例如

try
{
  while(true)
   {
    socket.send(data);
   }
}catch (SocketTimeoutException e)
{
 // resend for which it occured
}

这可能吗??

2 个答案:

答案 0 :(得分:3)

关于setSoTimeout目的,文档似乎很清楚:

  

对此DatagramSocket的receive()调用将阻止仅这段时间

首先,它与send没有任何关系,其次只有在一段时间内阻塞时才会超时。

如果你想要可靠性使用TCP。如果您绝对需要/想要使用UDP,则必须设计自己的可靠性机制。这是关于这个特殊问题的另一个问题:

What do you use when you need reliable UDP?

基本上它取决于你正在做什么,因为如果你需要一个通用的解决方案,你最终会重新发明TCP!

答案 1 :(得分:2)

UDP不可靠,它没有确认。即没有可以超过的确认计时器。