setsotimeout в Java - PullRequest
       30

setsotimeout в Java

0 голосов
/ 13 февраля 2011

Я пытаюсь отправить данные через DatagramSocket и хотел бы сделать так, чтобы, если отправленные данные превысили тайм-аут своего подтверждения, они должны быть повторно отправлены.

Можем ли мы использовать параметр DatagramSocket.SetSoTimeoutдля этого ??Если да, то как я могу ??

Например,

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

Возможно ли это сделать ??

Ответы [ 2 ]

3 голосов
/ 13 февраля 2011

Документация кажется довольно ясной о setSoTimeout назначении:

вызовом receive () для этого DatagramSocket будет блокировать только на это время

Во-первых, он не имеет ничего общего с send, а во-вторых, это только тайм-аут, если он блокируется на определенное время.

Если вы хотите надежности, используйте TCP.Если вам абсолютно необходимо / хотите использовать UDP, вам придется разработать собственный механизм обеспечения надежности.Вот еще один вопрос об этой конкретной проблеме:

Что вы используете, когда вам нужен надежный UDP?

В основном это действительно зависит от того, что вы делаете, потому что есливам нужно универсальное решение, в итоге вы заново изобретаете TCP!

2 голосов
/ 13 февраля 2011

UDP ненадежен, у него нет подтверждения. т.е. нет таймера подтверждения, который может быть превышен.

...