2012-08-13 76 views
0

我正在嘗試通過以下代碼ping各種IP來檢查連接。java.net.ConnectException:系統缺少足夠的緩衝空間或者因爲隊列已滿

ipAdd = InetAddress.getByName(ipAddress); 
      boolean isConnected = ipAdd.isReachable(3000); 

但我得到這個錯誤。

java.net.ConnectException: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 

共振存在大約1000個線程同時進行此過程。我曾考慮將這些IP放在隊列中。但爲此,我想知道我可以使用的最大線程數。有什麼方法可以找出緩衝區空間,這樣我就可以計算出要運行上述代碼的同時觸發的線程數量。 除了排隊方法,我將不勝感激任何解決方案/解決方案。

+0

你有[googled](http://blogs.msdn.com/b/sql_protocols/archive/2009/03/09/understanding-the-error-an-operation-on-a-socket-could-not因爲系統缺乏足夠的緩衝區空間或因爲隊列是full.aspx)今天? – Augusto 2012-08-13 14:41:23

+0

我已經通過該鏈接了。我明白,它的操作系統的限制,但我做了一個sepearate程序,我在一次輕鬆打3000個IP。但在我的應用程序代碼中,它顯示了1000個線程本身的錯誤。 – rdp 2012-08-14 11:06:36

+0

調用isReachable方法時是否打開任何連接?如果是,那麼是否需要關閉它?也讓我知道如何去做。 – rdp 2012-08-14 11:14:24

回答

0

我想這個例外發生是因爲你已經超過了你的應用程序可以使用的端口的限制。
你關閉你的連接嗎?

+0

我正在關閉所有的插座。但是隻有當IP可達時纔會創建套接字。異常發生在isReachable方法調用中。一次有1000個isReachable調用(1000個線程) – rdp 2012-08-14 10:58:17

+0

好吧,即使在稍後創建Socket,物理上,java也必須保留一個端口來檢查地址是否可達。如果爲什麼這些港口沒有得到釋放,那麼可能會讓你的游泳池溢出。 – Kostronor 2012-08-14 11:22:45

+0

你能告訴我該怎麼做嗎?該布爾isConnected = ipAdd.isReachable(3000);後應該是我的步驟; – rdp 2012-08-14 12:08:25

相關問題