2013-11-09 76 views
1

我正在创建一个需要侦听传入UDP包的服务器。DatagramSocket.receive()何时抛出IOException?

我的问题是我不知道如何处理 DatagramSocket.receive()。我可以找到每个教程,只是打印它的堆栈跟踪并继续或从方法中抛出。没有人实际告诉我什么时候或为什么抛出异常。即使是刚刚的Javadoc指出:

IOException - if an I/O error occurs when creating the socket. 

这让我很难回答,我应该在这种情况下做的。

  • 我可以安全地恢复读取套接字吗?
  • 我应该关闭它,然后再试一次吗?
  • 我应该把它当成一个致命的异常并且放弃一切吗?
+0

你是否期待很多这样的例外?如果没有,您可以显示/记录exception.message,睡眠(1000)以防止连续错误发生失控异常,然后重试。 –

+0

嗯,就是这样。因为我不知道是什么导致它,我不知道会发生什么。 如果这件事发生在这个接收下,最好再尝试一次,但是如果套接字被炸了,最好试着重新打开套接字,如果我不幸运,最好的办法是记录它并提醒有人来尽快查看。 当然,我可以统计重试次数和备用次数,但我想这肯定是有意义的。 – Pajn

回答

2

如果您设置了读取超时并且过期,则会抛出SocketTimeoutException。在这种情况下,您可以重试。如果还有其他错误,它会抛出IOException:这些对于套接字来说都是致命的,你必须关闭它。

+0

我不确定如果我完全理解,但你是否说IOException我应该尝试重新打开套接字? – Pajn

+0

@Pajn不,我只能建议你再读一遍。我不喜欢这个'你在说'比赛。在我的长期经验中,答案总是“不”。 – EJP

+0

今天我明白了答案,但一年多以前,我很新,对此感到困扰。好东西,我重新回顾了老问题,以便我现在可以接受它。迟到比我猜想的晚... – Pajn

相关问题