【问题标题】:java.io.IOException: Unable to establish loopback connection java.net.BindException Address already in use: bindjava.io.IOException:无法建立环回连接 java.net.BindException 地址已在使用中:绑定
【发布时间】:2014-10-11 10:57:08
【问题描述】:

我在 Eclipse 控制台上的 windows7 系统上运行了很长时间的选择器测试。12 小时后,这么多的 select.open 已经被多次执行,它,'selector.open()',突然抛出以下例外:

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

我的问题是程序发生了什么?以及如何解决?

【问题讨论】:

    标签: java selector


    【解决方案1】:

    为什么你一直在创建选择器?也许你在泄露它们?在任何情况下,您都应该尽可能长时间地使用一个 Selector,而不是不断创建新的。

    【讨论】:

    • 谢谢!你是对的。但是程序运行在服务器端,当一个请求来自客户端时,它会创建一个线程来处理请求和响应的步骤......所以会有一个选择器到一个响应线程......而我我仍然想知道这是否是一个正确的代码逻辑,你能详细帮助我吗:)?
    • 为什么要创建一个使用非阻塞 I/O 和它自己的Selector 的线程?这是疯狂。只需使用阻塞 I/O。或者 one 线程和 one Selector.
    • 感谢 4 回答我的问题,然后我真的不知道 2 如何使用选择器,通过这个问题,我选择了“一个线程和一个选择器”,这很好用 4 我的工作!跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2021-12-02
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多