2014-10-11 71 views
-1

我在eclipse控制檯上的windows7系統上運行了很長時間的選擇器測試.12小時後,選擇了這麼多。開放已經由次seccessfully完成倍,它的「selector.open()」,突然拋出以下excetption:java.io.IOException:無法建立回送連接java.net.BindException已經在使用的地址:bind

java.io.IOException: Unable to establish loopback connection 
at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:125) 
at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:69) 
at java.security.AccessController.doPrivileged(Native Method) 
at sun.nio.ch.PipeImpl.<init>(PipeImpl.java:141) 
at sun.nio.ch.SelectorProviderImpl.openPipe(SelectorProviderImpl.java:50) 
at java.nio.channels.Pipe.open(Pipe.java:150) 
at sun.nio.ch.WindowsSelectorImpl.<init>(WindowsSelectorImpl.java:126) 
at sun.nio.ch.WindowsSelectorProvider.openSelector(WindowsSelectorProvider.java:44) 
at java.nio.channels.Selector.open(Selector.java:227) 
at cn.scut.chiu.weibocrawler.job.JobManager.initIO(JobManager.java:55) 
at cn.scut.chiu.weibocrawler.job.JobManager.<init>(JobManager.java:50) 
at cn.scut.chiu.weibocrawler.distributed.worker.Worker.doCommandJob(Worker.java:80) 
at cn.scut.chiu.weibocrawler.distributed.NodeBase.writeOp(NodeBase.java:186) 
at cn.scut.chiu.weibocrawler.distributed.NodeBase.selectOp(NodeBase.java:87) 
at cn.scut.chiu.weibocrawler.distributed.worker.Worker.run(Worker.java:63) 
at java.lang.Thread.run(Thread.java:722) 
Caused by: java.net.BindException: Address already in use: bind 
at sun.nio.ch.Net.bind0(Native Method) 
at sun.nio.ch.Net.bind(Net.java:344) 
at sun.nio.ch.Net.bind(Net.java:336) 
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:199) 
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67) 
at sun.nio.ch.PipeImpl$Initializer.run(PipeImpl.java:91) 
... 15 more 

我的問題是發生了什麼事的程序?以及如何解決它?

回答

0

爲什麼你不斷創建選擇器?也許你在泄漏他們?無論如何,您應該儘可能長時間使用一個選擇器,而不是繼續創建新的選擇器。

+0

謝謝!你說得對。但程序在服務器端運行,當請求來自客戶端時,它創建一個線程來處理請求和響應步驟......所以會有一個選擇器到一個響應線程......而我我仍然想知道如果這是一個正確的代碼邏輯,你能詳細地幫我:)? – DeFOX 2014-10-11 03:40:19

+0

你爲什麼要創建一個使用非阻塞I/O和它自己的'Selector'的線程?這是瘋狂。只需使用阻塞I/O。或*一個*線程和*一個*'選擇器.' – EJP 2016-05-26 07:11:29

+0

謝謝4回答我的問題,然後我真的不知道如何2使用選擇器,並通過這個問題,我選擇了'一個線程和一個選擇器' 4我的工作! – DeFOX 2016-06-03 01:27:50

相關問題