2013-11-09 112 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

相關問題