【问题标题】:socketChannel throws IOException with Permission DeniedsocketChannel 抛出 IOException,权限被拒绝
【发布时间】:2016-12-04 20:53:30
【问题描述】:

我在各种平台上工作了一段时间的代码突然开始失败,代码中发生了变化,但与这个地方相关的区域没有变化。

抛出异常的代码行是:

(SocketChannel) selectionKey.channel()).finishConnect()

它会抛出:

java.net.SocketException:权限被拒绝:没有更多信息

可能是什么问题?

一些可能显示更多信息的日志行,它是一个测试代码:

2016-12-04 22:50:10,585 [main] 调试套接字 - Socket-Client-1-1
注册连接地址:0.0.0.0/0.0.0.0:8080
2016-12-04 22:50:10,585 [main] DEBUG SocketSelector - 注册密钥: OP_CONNECT(用于 Socket-Client-1-1)
2016-12-04 22:50:10,595 [main] DEBUG SocketSelector - 注册到:OP_CONNECT > 2016-12-04 22:50:10,595 [NetworkThread] DEBUG SocketSelector - 已选择密钥
对于通道(java.nio.channels.SocketChannel[connection-pending 远程=0.0.0.0/0.0.0.0:8080])

【问题讨论】:

  • 你在这个频道上打过connect()吗?你之前有没有打电话给finishConnect()?如果是,它是否返回 true?
  • 是的,我调用了 connect(),它成功了。 finishConnect() 从一开始就抛出这个异常。
  • 为什么要连接到 0.0.0.0?
  • 后来我把它改成了本地主机,它没有改变任何东西
  • 请在您的问题中发布连接到 127.0.0.1 的代码以及相应的错误和日志条目。与 0.0.0.0 相关的一切都是无效和不相关的,应该删除。

标签: java network-programming nio


【解决方案1】:

问题是您尝试连接到 0.0.0.0,这不是有效的 TCP 目标地址。由于 man connect 中所述的原因,这会导致 EPERM。

使用 127.0.0.1 或正确的 IP 地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2011-04-09
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多