IPv6 - java.net.SocketException:权限被拒绝

时间:2014-08-22 11:47:12

标签: java sockets ipv6

我是ipv6功能的新手。

我试图通过ipv6地址从节点1连接到节点2,但我得到“java.net.SocketException:Permission denied”。

我在论坛中搜索过,他们建议使用“-Djava.net.preferIPv4Stack = true”。但由于我必须测试ipv6地址,我将其设置为“-Djava.net.preferIPv4Stack = false”。

我的示例程序如下所示,我从Node1运行。

public static void main(String...args) {
final Socket s = new Socket();
int port = 5122;
try {
  s.setSoTimeout(30000);
  s.connect(new InetSocketAddress("fcff:3:10:64:5e26:aff:fe77:e4fd", port), 5000);
} catch (SocketException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
}

来自Node2的ifconfig输出。

[root@MAV ipv6_real]# ifconfig
em1       Link encap:Ethernet  HWaddr 5C:26:0A:77:E4:FD  
      inet addr:10.10.64.86  Bcast:10.10.67.255  Mask:255.255.252.0
      inet6 addr: fe80::5e26:aff:fe77:e4fd/64 Scope:Link
      inet6 addr: fcff:3:10:64:5e26:aff:fe77:e4fd/64 Scope:Global
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:843294 errors:0 dropped:0 overruns:0 frame:0
      TX packets:390846 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:351525171 (335.2 MiB)  TX bytes:74057040 (70.6 MiB)
      Interrupt:20 Memory:e2e00000-e2e2000

异常堆栈跟踪:

java.net.SocketException: Permission denied
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at com.vij.test.sockettest.main(sockettest.java:18)
操作系统:Fedora 16

测试的Java版本:jdk1.6.0_33,jdk1.6.0_32,jdk1.6.0_25

我也试过-Djava.net.preferIPv6Addresses = true,但输出相同。

如果你能帮助我解决这个问题,那就太好了。

1 个答案:

答案 0 :(得分:0)

如下面的问题Permission denied on ipv6 Socket in Java

中所述,在停止ip6tables后问题得以解决