我正在尝试通过DatagramSocket发送数据,并希望这样做,如果发送的数据已经超过其确认的超时,那么它应该重新发送。
我们可以使用DatagramSocket.SetSoTimeout选项吗?如果是的话,我怎么办?
例如
try
{
while(true)
{
socket.send(data);
}
}catch (SocketTimeoutException e)
{
// resend for which it occured
}
这可能吗??
答案 0 :(得分:3)
关于setSoTimeout
目的,文档似乎很清楚:
对此DatagramSocket的receive()调用将阻止仅这段时间
首先,它与send
没有任何关系,其次只有在一段时间内阻塞时才会超时。
如果你想要可靠性使用TCP。如果您绝对需要/想要使用UDP,则必须设计自己的可靠性机制。这是关于这个特殊问题的另一个问题:
What do you use when you need reliable UDP?
基本上它取决于你正在做什么,因为如果你需要一个通用的解决方案,你最终会重新发明TCP!
答案 1 :(得分:2)
UDP不可靠,它没有确认。即没有可以超过的确认计时器。